繁体   English   中英

从Spark中的单个数据框中删除Column的列表

[英]Drop list of Column from a single dataframe in spark

我有一个Dataframe是由两个Dataframe的连接产生的: df1df2df3 df2中找到的所有列也在df1但是它们的内容不同 我想从df2.columns删除名称在df2.columns中的所有df1列。 有没有不用var就能做到这一点的方法吗? 目前我已经做到了

var ret = df3
df2.columns.foreach(coln => ret = ret.drop(df2(coln)))

但是我真正想要的只是一个捷径

df3.drop(df1(df2.columns(1))).drop(df1(df2.columns(2)))....

不使用var。

传递列列表不是一种选择,不知道是否是因为我使用的是spark 2.2

编辑:

重要说明:我事先不知道df1df2的列

在执行联接本身时,这是可以实现的。 请尝试以下代码

 val resultDf=df1.alias("frstdf").join(broadcast(df2).alias("scndf"),  $"frstdf.col1" === $"scndf.col1", "left_outer").selectExpr("scndf.col1","scndf.col2"...)//.selectExpr("scndf.*")

这将仅包含第二个数据帧中的列。 希望这可以帮助

快捷方式是:

val ret  = df2.columns.foldLeft(df3)((acc,coln) => acc.drop(df2(coln)))

我建议删除联接之前的列。 或者,仅从df3中选择来自df2的列:

val ret = df3.select(df2.columns.map(col):_*)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM