【问题标题】:how to process output of groupByKey RDD which is key and list of Values RDD[K,List[v]]如何处理 groupByKey RDD 的输出,它是键和值列表 RDD[K,List[v]]
【发布时间】:2016-04-11 16:24:14
【问题描述】:

我是 Spark 的新手,下面的问题困扰了我一段时间。

我的输入文件是逗号分隔的文件,并创建了 RDD,其中 Store 作为键,促销列表作为值。一个键(我的案例产品)可以有多个值。 我已经使用 GroupByKey 对 RDD 进行了分组。它解决了我的问题,将所有促销活动置于同一密钥下。到这一切都很好。现在我想遍历每个键的值列表,以确定我的键(存储)是否有特定的促销。如果我的密钥找到该促销,则使用 store(key) 和 Promotion(value) 写入记录

val firstRDD = sc.textFile(".....")
val secondRDD = firstRDD.map(line=>line.split(",")(0),line.split(",")(1))
val thirdRDD = secondRDD.groupByKey()

(1,(aaa,bbb,ccc,ddd))
(2,(aaa,ccc))
(3,(ddd,aaa))

根据上面的列表,我想知道键 1 值 aaa 是否存在,如果不存在 aaa,则 bbb 是否存在。如何在 Spark Scala 中执行此操作。

【问题讨论】:

  • 在使用 map 之前将其视为基本的 Scala 操作。如果你有一个元组,你将如何处理它以获得你想要的?

标签: scala apache-spark


【解决方案1】:

因为您的 RDD 是 Tuple2 类型,所以您可以使用 PairRDD 功能。这意味着您可以访问 RDD 的“查找”功能。为了查看1 是否有对应的值aaa,最简单的方法可能是

secondRDD.lookup(1).contains("aaa")

请注意,使用 secondRDD 比使用 thirdRDD 更容易。

【讨论】:

  • 感谢您的帮助...在我的示例中,我的 secondRDD 键不会包含所有属于该键的值。只有在 groupByKey() 之后,我才会得到该键的值列表。
  • val purchaseRDD = sc.textFile("sales.txt") val purchaseRDDMap = purchaseRDD.map{purchase=> val fields = purchase.split(",") val purchaseKey = fields(0) val purchaseValue = fields(2).toDouble (purchaseKey,purchaseValue) } .groupByKey() .map(purchase=> (purchase._1, (purchase._2 ***之后我被卡住了
猜你喜欢
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 2016-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
相关资源
最近更新 更多