【问题标题】:How to check for intersection of two DataFrame columns in Spark如何检查 Spark 中两个 DataFrame 列的交集
【发布时间】:2017-05-24 21:00:38
【问题描述】:

使用pysparksparkr(最好同时使用),我怎样才能得到两个DataFrame 列的交集?例如,在sparkr 我有以下DataFrames

newHires <- data.frame(name = c("Thomas", "George", "George", "John"),
                       surname = c("Smith", "Williams", "Brown", "Taylor"))
salesTeam <- data.frame(name = c("Lucas", "Bill", "George"),
                        surname = c("Martin", "Clark", "Williams"))
newHiresDF <- createDataFrame(newHires)
salesTeamDF <- createDataFrame(salesTeam)

#Intersect works for the entire DataFrames
newSalesHire <- intersect(newHiresDF, salesTeamDF)
head(newSalesHire)

        name  surname
    1 George Williams

#Intersect does not work for single columns
newSalesHire <- intersect(newHiresDF$name, salesTeamDF$name)
head(newSalesHire)

as.vector(y) 中的错误:没有将这个 S4 类强制为 向量

如何让intersect 用于单列?

【问题讨论】:

  • 在 pyspark spark.createDataFrame(["a","b","x"],StringType()).intersect(spark.createDataFrame(["z","y","x"],StringType())) 中运行良好

标签: apache-spark pyspark sparkr


【解决方案1】:

您需要两个 Spark DataFrame 才能使用 intersect 函数。您可以使用 select 函数从每个 DataFrame 中获取特定列。

在 SparkR 中:

newSalesHire <- intersect(select(newHiresDF, 'name'), select(salesTeamDF,'name'))

在 pyspark 中:

newSalesHire = newHiresDF.select('name').intersect(salesTeamDF.select('name')) 

【讨论】:

  • 我认为您在 pyspark 示例中放错了括号。
猜你喜欢
  • 1970-01-01
  • 2019-06-04
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2016-06-24
相关资源
最近更新 更多