在 Spark 中连接两个数据帧
Posted
技术标签:
【中文标题】在 Spark 中连接两个数据帧【英文标题】:Joining two dataframes in Spark 【发布时间】:2016-02-19 00:37:31 【问题描述】:当我尝试使用
连接两个数据框时DataFrame joindf = dataFrame.join(df, df.col(joinCol)); //.equalTo(dataFrame.col(joinCol)));
我的程序抛出异常
org.apache.spark.sql.AnalysisException:连接条件“url”类型 字符串不是布尔值。;
这里 joinCol 的值是 url 需要输入作为可能导致这些异常的原因
【问题讨论】:
【参考方案1】:join
作为第二个参数的变体 Column
期望它可以被评估为布尔表达式。
如果您想要基于列名的简单等值连接,请使用a version which takes a column name as a String
:
String joinCol = "foo";
dataFrame.join(df, joinCol);
【讨论】:
【参考方案2】:这意味着连接条件应该评估为表达式。假设我们想根据 id 加入 2 个数据帧,所以我们可以做的是:使用 Python:
df1.join(df2, df['id'] == df['id'], 'left') # 3rd parameter is type of join which in this case is left join
使用 Scala:
df1.join(df2, df('id') === df('id')) // create inner join based on id column
【讨论】:
【参考方案3】:你不能使用 df.col(joinCol) 因为这不是一个表达式。为了加入 2 个数据框,您需要确定要加入的列
假设您有一个 DataFrame emp 和 dept,在 Scala 中连接这两个数据帧应该如下所示
empDF.join(deptDF,empDF("emp_dept_id") === deptDF("dept_id"),"inner")
.show(false)
本例取自Spark SQL Join DataFrames
【讨论】:
以上是关于在 Spark 中连接两个数据帧的主要内容,如果未能解决你的问题,请参考以下文章