Spark SQL在UNION

时间:2017-08-31 12:59:29

标签: apache-spark apache-spark-sql

我正在自己的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%'
---------------------^^^^

感谢任何帮助。

由于

2 个答案:

答案 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的建议。