【发布时间】:2016-07-14 21:42:13
【问题描述】:
在标准 SQL 中,当您将表连接到自身时,您可以为表创建别名以跟踪您所引用的列:
SELECT a.column_name, b.column_name...
FROM table1 a, table1 b
WHERE a.common_field = b.common_field;
我可以想到两种使用 Spark DataFrame API 实现相同目标的方法:
解决方案 #1:重命名列
对于 this question 的答复有几种不同的方法。这只是用特定后缀重命名所有列:
df.toDF(df.columns.map(_ + "_R"):_*)
例如你可以这样做:
df.join(df.toDF(df.columns.map(_ + "_R"):_*), $"common_field" === $"common_field_R")
解决方案 #2:将引用复制到 DataFrame
另一个简单的解决方案是这样做:
val df: DataFrame = ....
val df_right = df
df.join(df_right, df("common_field") === df_right("common_field"))
这两种解决方案都有效,我可以看到每种解决方案在某些情况下都很有用。两者之间有什么我应该注意的内部差异吗?
【问题讨论】:
标签: apache-spark dataframe apache-spark-sql