apache-spark - groupByKey 与 hashPartitioner 和 mapPartitions?

标签 apache-spark

所以,我有如下数据,

[ (1, data1), (1, data2), (2, data3), (1, data4), (2, data5) ]

我想将其转换为以下内容,以进行进一步处理。
[ (1, [data1, data2, data4]), (2, [data3, data5]) ]

一种方法是使用 groupByKey .另一种方法是使用 hashPartitioner 根据键对 RDD 进行分区。 ,然后使用 mapPartitions 处理每个键的值.哪种方法会更有效?

最佳答案

我不认为你可以使用 reduceByKey直接按照评论中的建议,但如果您映射 (Int, Object)配对到 (Int, List(Object))那么你就可以使用它了。我希望以下方法是最有效的方法之一,但真正实用的测试是了解哪种方法最适合您的特定用例的最佳方法。

object main extends App {

  import org.apache.spark.{SparkContext, SparkConf}
  import org.apache.spark.rdd.PairRDDFunctions

  val conf = new SparkConf().setMaster("local").setAppName("example")
  val sc = new SparkContext(conf)

  val data = List((1, "data1"), (1, "data2"), (2, "data3"), (1, "data4"), (2, "data5"))

  val rdd = sc.parallelize(data).mapValues(str => List(str)).reduceByKey((l1, l2) => l1 ::: l2)
  rdd.collect().foreach{
    case (key, list) => println(s"key: $key values: ${list.mkString(";")}")
  }
  sc.stop()
}

关于apache-spark - groupByKey 与 hashPartitioner 和 mapPartitions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31925050/

相关文章:

apache-spark - SPARK (pyspark) 中的自定义分区器

python - 合并 pySpark RDD 中的列表列表

apache-spark - 如何在 PySpark DataFrame 中强制进行特定分区?

java - 如何创建 RowEncoder 以将 Tuple<A,Row> 映射到 Row?

apache-spark - 如何将不同的聚合函数应用于同一列为什么要对 spark 数据帧进行分组?

python - PySpark show_profile() 不使用 DataFrame API 操作打印任何内容

apache-spark - Spark 2.1 - 实例化 HiveSessionState 时出错

scala - 如何在 Spark ML 中使用 CountVectorizer 计算单词的频率?

apache-spark - yarn 上的 Spark 流 - 容器运行超出物理内存限制

maven - Spark 1.3.0 : Building Examples: Failed to execute goal org. scalastyle