python - PySpark:将 DataFrame 列的值与另一个 DataFrame 列进行匹配

标签 python apache-spark pyspark

在 Pandas DataFrame 中,我可以使用 DataFrame.isin() 函数将列值与另一列进行匹配。

例如: 假设我们有一个 DataFrame:

df_A = pd.DataFrame({'col1': ['A', 'B', 'C', 'B', 'C', 'D'], 
                     'col2': [1, 2, 3, 4, 5, 6]})
df_A

    col1  col2
0    A     1
1    B     2
2    C     3
3    B     4
4    C     5
5    D     6         

和另一个 DataFrame:

df_B = pd.DataFrame({'col1': ['C', 'E', 'D', 'C', 'F', 'G', 'H'], 
                     'col2': [10, 20, 30, 40, 50, 60, 70]})
df_B

    col1  col2
0    C    10
1    E    20
2    D    30
3    C    40
4    F    50
5    G    60
6    H    70       

我可以使用 .isin() 函数将 df_B 的列值与 df_A 的列值进行匹配

例如:

df_B[df_B['col1'].isin(df_A['col1'])]

产量:

    col1  col2
0    C    10
2    D    30
3    C    40

PySpark DataFrame 中的等效操作是什么?

df_A = pd.DataFrame({'col1': ['A', 'B', 'C', 'B', 'C', 'D'], 
                     'col2': [1, 2, 3, 4, 5, 6]})
df_A = sqlContext.createDataFrame(df_A)

df_B = pd.DataFrame({'col1': ['C', 'E', 'D', 'C', 'F', 'G', 'H'], 
                     'col2': [10, 20, 30, 40, 50, 60, 70]})
df_B = sqlContext.createDataFrame(df_B)


df_B[df_B['col1'].isin(df_A['col1'])]

上面的.isin() 代码给我一条错误信息:

u'resolved attribute(s) col1#9007 missing from 
col1#9012,col2#9013L in operator !Filter col1#9012 IN 
(col1#9007);;\n!Filter col1#9012 IN (col1#9007)\n+- 
LogicalRDD [col1#9012, col2#9013L]\n'

最佳答案

这种操作在spark中称为left semi join:

df_B.join(df_A, ['col1'], 'leftsemi')

关于python - PySpark:将 DataFrame 列的值与另一个 DataFrame 列进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42545788/

相关文章:

python - 尽管满足条件,但字符串上的 for 循环的 if 语句仍不起作用

python - 如何计算文件中唯一字符的数量?

scala - 如何在 UDAF 的 MutableAggregationBuffer 中添加/改变 Map 对象?

scala - Spark::KMeans 调用 takeSample() 两次?

python - 推荐系统中的 split

dataframe - 将数据框的架构更改为其他架构

python - PySpark - 将列表作为参数传递给 UDF

python - 尝试找出句子中出现次数最多的情态动词

python - 使用 Distribute 包含包数据

python - Json 文件到 pyspark 数据帧