【问题标题】:pyspark trying to retrieve rows having same idpyspark 试图检索具有相同 id 的行
【发布时间】:2017-08-02 23:50:41
【问题描述】:

我使用的是火花 2.1.0。下面是我的数据框。问题陈述来自 b 列,我需要检索在 a 中具有相同值而在 b 中具有不同值的行。提到了结果数据框

a   b

1   2

1   3

1   4

2   6

3   7

结果数据框:

a b

1 2

1 3

1 4

我使用了下面的代码,但它不起作用

sqlCtx.sql("select * from df1 group by a,b having count(a)>=2")

请帮我解决问题。

【问题讨论】:

  • 为什么结果数据框只有 a 列中的 1? 2 和 3 在哪里?
  • df.filter($"a" === df.first()(0)).distinct() 应该适用于您生成的数据框,但首先确认我上面的第一条评论。

标签: python r hadoop pyspark


【解决方案1】:

希望这会有所帮助!

import pyspark.sql.functions as func
df = sc.parallelize([(1,2), (1,3), (1,4), (2,6), (3,7)]).toDF(["a", "b"])
df.show()
df1 = df.groupBy('a').agg(func.collect_list('b').alias("b_list"),func.count('b').alias("count")).filter(func.col('count') > 1)
df2 = df1.rdd.flatMap(lambda row: [(row.a, b) for b in row.b_list]).toDF(["a", "b"])
df2.show()

编辑说明:更正了错字)

如果它解决了您的问题,请不要忘记告诉我们 :)

【讨论】:

  • @Naveen 如果您喜欢该解决方案,那么您应该投票/接受它作为正确答案。如果他们将来遇到类似的问题,它肯定会帮助其他人。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
相关资源
最近更新 更多