Apache spark 按字段对Spark数据帧进行重复数据消除
假设我有以下spark数据帧: 是否可以通过geohash字段将其复制,然后像这样收集第二个字段的结果Apache spark 按字段对Spark数据帧进行重复数据消除,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,假设我有以下spark数据帧: 是否可以通过geohash字段将其复制,然后像这样收集第二个字段的结果 ----------------------- | geohash | timehash | ---------------------- | x | y , z | ----------------------- | z | y | 使用reduceByKey的aggregateByKey可以获得所需的结果。我还没有用您提供的
-----------------------
| geohash | timehash |
----------------------
| x | y , z |
-----------------------
| z | y |
使用
reduceByKey
的aggregateByKey
可以获得所需的结果。我还没有用您提供的确切数据测试我的代码。但是,基本代码应该是
val geoHashRdd = geoHashDF.map(row ⇒ (row.geohash, row.timehash)).rdd;
val reduceByKey = geoHashRdd.reduceByKey((a , b) => a.concat(b))
或
使用
reduceByKey
的aggregateByKey
可以获得所需的结果。我还没有用您提供的确切数据测试我的代码。但是,基本代码应该是
val geoHashRdd = geoHashDF.map(row ⇒ (row.geohash, row.timehash)).rdd;
val reduceByKey = geoHashRdd.reduceByKey((a , b) => a.concat(b))
或
您可以使用
groupBy
和aggregate
函数来实现这一点,如下所示
df.groupBy("geohash").agg(collect_list("timehash")).alias("timehash").show
//output
+-------+--------+
|geohash|timehash|
+-------+--------+
| x| [y, z]|
| z| [y]|
+-------+--------+
您可以使用
groupBy
和aggregate
函数来实现这一点,如下所示
df.groupBy("geohash").agg(collect_list("timehash")).alias("timehash").show
//output
+-------+--------+
|geohash|timehash|
+-------+--------+
| x| [y, z]|
| z| [y]|
+-------+--------+
我们为什么不在这里使用groupByKey?给定用例。那么我们什么时候应该使用它呢?Groupbykey的性能比reducebykey差。是的,你也可以用。是的,我明白了。但是如果这不是一个合适的用例,我们应该在什么时候使用它呢?这就是为什么我们不在这里使用groupByKey?给定用例。那么我们什么时候应该使用它呢?Groupbykey的性能比reducebykey差。是的,你也可以用。是的,我明白了。但是如果这不是一个合适的用例,我们应该在什么时候使用它呢?这就是转换为RDD的点,如下所示,将给出行的RDD以及随后的问题。collect_list返回一个数组,我们必须根据需要处理该数组。很好。仅对下面的内容进行注释如下转换为RDD将给出行的RDD以及随后的问题。collect_list返回一个数组,我们必须根据需要处理该数组。很好。以下仅作评论