Spark scala:从其他数据框中选择列名

NS *_*nan 0 hadoop scala dataframe apache-spark apache-spark-sql

有两个 json,第一个 json 有更多列,并且总是超级集。

val df1 = spark.read.json(sqoopJson)
val df2 = spark.read.json(kafkaJson)
Run Code Online (Sandbox Code Playgroud)

除了操作:

我喜欢在 df1 和 df2 上应用 except 操作,但是 df1 有 10 列而 df2 只有 8 列。如果我手动删除 df1 中的 2 列,则 except 将起作用。但是我有 50 多个表/json,并且需要对所有 50 组表/json 执行 EXCEPT。

题 :

如何仅从 DF1 中选择 DF2 (8) 列中可用的列并创建新的 df3?因此 df3 将拥有来自 df1 的有限列的数据,并且它将与 df2 列匹配。

Sha*_*ala 5

对于问题: 如何仅从 DF1 中选择 DF2 (8) 列中可用的列并创建新的 df3?

//Get the 8 column names from df2 
val columns = df2.schema.fieldNames.map(col(_))

//select only the columns from df2 
val df3 = df1.select(columns :_*)
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!