我正在自己的View上做一个Union,然后尝试选择我创建的别名列。
这是我的代码:
val mergedDF = sparkSession.sqlContext.sql(" SELECT COLUMN1 as COLUMN3 FROM MY_VIEW Union SELECT COLUMN2 as COLUMN3 from MY_VIEW")
val mergedView = mergedDF.createOrReplaceTempView("MERGED_VIEW")
val distinctColumnDF =sparkSession.sqlContext.sql(" SELECT distinct COLUMN3 from MERGED_VIEW WHERE node like '%city%')
logger.debug("No.of Distinct City Rows="+distinctColumnDF.count());
我收到以下错误:
org.apache.spark.sql.catalyst.parser.ParseException: mismatched input 'from' expecting { <EOF>, 'WHERE' , 'GROUP', 'ORDER', 'HAVING', 'LIMIT', 'LATERAL', 'WINDOW', 'UNION', 'EXCEPT', 'MINUS', 'INTERSECT','SORT','CLUSTER','DISTRIBUTE' }(line 1 , pos 21)
== SQL ==
SELECT distinct COLUMN3 from MERGED_VIEW where node like '%city%'
---------------------^^^^
感谢任何帮助。
由于
答案 0 :(得分:0)
您可以在数据框上使用别名方法,如:
NSDictionary
答案 1 :(得分:0)
以下似乎正在发挥作用。
val dfA = sparkSession.sqlContext.sql("SELECT COLUMN1 FROM MY_VIEW")
val dfB = sparkSession.sqlContext.sql("SELECT COLUMN2 FROM MY_VIEW")
val mergedDF = dfA.select(dfA.col("COLUMN1").alias("COLUMN3")).union(dfB.select(dfB.col("COLUMN2").alias("COLUMN3")))
val str = mergedDF.select(mergedDF.col("COLUMN3")).filter(mergedDF.col("COLUMN3").contains("test")).distinct().count()
logger.debug("No.of Distinct Rows="+str);
不确定为什么纯SQL语法不起作用。
感谢FiagB的建议。