动态生成Spark Sql selectExpr语句以实现合并

时间:2019-04-12 09:12:27

标签: apache-spark

我正在一个项目中,我需要从不同来源向Coalsace动态提供多个列名。

e1.csv

id,code,type
1,,A
2,,
3,123,I

e2.csv

id,code,type
1,456,A
2,789,A1
3,,C

代码


Dataset<Row> df1 = spark.read().format("csv").option("header", "true").load("C:\\Users\\System2\\Videos\\folder\\e1.csv");

Dataset<Row> df2 = spark.read().format("csv").option("header", "true").load("C:\\Users\\System2\\Videos\\folder\\e2.csv");



Dataset<Row> newDS = df1.as("a").join(df2.as("b")).where("a.id== b.id").selectExpr("coalesce(a.id, b.id) AS `id`;coalesce(a.code, b.code) AS `code`");

我得到的错误代码

Exception in thread "main" org.apache.spark.sql.catalyst.parser.ParseException: 
mismatched input ';' expecting <EOF>(line 1, pos 38)


我尝试过的

尝试了\n,;,但没有一个有效的


Dataset<Row> newDS = df1.as("a").join(df2.as("b")).where("a.id== b.id").selectExpr("coalesce(a.id, b.id) AS `id \n coalesce(a.code, b.code) AS `code`");

1 个答案:

答案 0 :(得分:0)

语法错误。您的代码将类似于:

Dataset<Row> newDS = df1.as("a").join(df2.as("b")).where("a.id== b.id").selectExpr("coalesce(a.id, b.id) AS `id`","coalesce(a.code, b.code) AS `code`");