如何在 Spark 中查找多个列的不同值

Ale*_*exV 2 apache-spark pyspark

我有一个 RDD,我想找到多个列的不同值。

例子:

Row(col1=a, col2=b, col3=1), Row(col1=b, col2=2, col3=10)), Row(col1=a1, col2=4, col3=10)

我想找一张地图:

col1=[a,b,a1]
col2=[b,2,4]
col3=[1,10]
Run Code Online (Sandbox Code Playgroud)

Dataframe 可以帮助更快/更简单地计算吗?

更新:

我对 RDD 的解决方案是:

col1=[a,b,a1]
col2=[b,2,4]
col3=[1,10]
Run Code Online (Sandbox Code Playgroud)

谢谢

Eli*_*lul 6

我希望我正确理解你的问题;您可以尝试以下操作:

import org.apache.spark.sql.{functions => F}
val df = Seq(("a", 1, 1), ("b", 2, 10), ("a1", 4, 10))
df.select(F.collect_set("_1"), F.collect_set("_2"), F.collect_set("_3")).show
Run Code Online (Sandbox Code Playgroud)

结果:

+---------------+---------------+---------------+
|collect_set(_1)|collect_set(_2)|collect_set(_3)|
+---------------+---------------+---------------+
|     [a1, b, a]|      [1, 2, 4]|        [1, 10]|
+---------------+---------------+---------------+
Run Code Online (Sandbox Code Playgroud)

出于以下几个原因,上面的代码应该比预期的select distinct 逐列更有效:

  1. 更少的工人主持往返旅行。
  2. 应先在工作人员本地进行重复数据删除,然后再进行工作人员间重复数据删除。

希望能帮助到你!