【发布时间】:2017-09-24 08:34:15
【问题描述】:
我正在使用 Pyspark 2.1.0。
我正在尝试使用以下方法执行两个数据帧的左外连接: 我有 2 个数据框,其架构如下所示:
crimes
|-- CRIME_ID: string (nullable = true)
|-- YEAR_MTH: string (nullable = true)
|-- CRIME_TYPE: string (nullable = true)
|-- CURRENT_OUTCOME: string (nullable = true)
outcomes
|-- CRIME_ID: string (nullable = true)
|-- YEAR_MTH: string (nullable = true)
|-- FINAL_OUTCOME: string (nullable = true)
我需要能够将犯罪与基于左外部的结果联系起来,因为单一犯罪存在许多结果。我想排除两个数据框共有的列。
我尝试了以下两种方法,但每种方法都会产生各种错误:
cr_outs = crimes.join(outcomes, crimes.CRIME_ID == outcomes.CRIME_ID, 'left_outer')\
.select(['crimes.'+c for c in crimes.columns] + ['outcomes.FINAL_OUTCOME'])
from pyspark.sql.functions as fn
cr_outs = crimes.alias('a').join(outcomes.alias('b'), fn.col('b.CRIME_ID') = fn.col('a.CRIME_ID') ,'left_outer')\
.select([fn.col('a.'+ c) for c in a.columns] + b.FINAL_OUTCOME)
有人可以建议另一种方法吗? 谢谢
【问题讨论】:
-
您不想在连接中包含
YEAR_MTH列吗? (连接...) -
一对多关系仅基于 CRIME_ID。
标签: join pyspark spark-dataframe