我对使用数据帧非常陌生。 我有两个框架。
一个被称为new
,另一个被称为existing
。
new
有一个称为ID的列。 existing
具有三列:ID,颜色,大小。
我想对这些帧进行操作,以便在new
中可以找到与existing
中的行具有相同ID的行时,我们添加颜色列的值(但不添加大小)列)到new
数据帧。如果找不到匹配项,我想为new
在我看来,我可以使用rdd.map做到这一点,但是我试图限制自己只能使用框架,因为我被告知它效率更高。
答案 0 :(得分:0)
您要查找的是联接,确切地说是左联接:
from pyspark.sql import functions as f
new_df = new_df.join(existing_df, "id", "left_outer") \
.select(new_df.id, f.coalesce(f.col("color"), f.rand())
如果合并函数不为空(即匹配)或随机数,它将为您提供颜色。您可能需要以某种方式将随机数映射到您的色谱图(取决于您在那里的表示形式)。
作为一般说明:使用数据帧和spark-sql API比执行RDD操作要快