【问题标题】:read individual elements of a tuple from a map((tuple),(tuple)) in scala从 scala 中的 map((tuple),(tuple)) 读取元组的各个元素
【发布时间】:2016-08-19 09:10:28
【问题描述】:

reducebykey 生成的输出是一个 ShuffledRDD,其键值都是多个字段的数组。我需要提取所有字段并写入配置单元表。

下面是我尝试的代码:

sqlContext.sql(s"select SUBS_CIRCLE_ID,SUBS_MSISDN,EVENT_START_DT,RMNG_NW_OP_KEY, ACCESS_TYPE  FROM FACT.FCT_MEDIATED_USAGE_DATA")
val USAGE_DATA_Reduce = USAGE_DATA.map{ USAGE_DATA => ((USAGE_DATA.getShort(0), USAGE_DATA.getString(1),USAGE_DATA.getString(2)),
(USAGE_DATA.getInt(3), USAGE_DATA.getInt(4)))}.reduceByKey((x, y) => (math.min(x._1, y._1), math.max(x._2,y._2)))

我期望的最终输出是所有五个字段: SUBS_CIRCLE_ID,SUBS_MSISDN,EVENT_START_DT, MINVAL, MAXVAL

这样就可以直接插入hive表了

【问题讨论】:

  • 我做了一些虚拟的重新格式化,但这对于非 OP 来说太多了;重新格式化您的代码,否则,很可能没有人会费心阅读此内容。
  • 尝试提供这个问题的简化版本,它是最小的、完整的和可验证的——这个 sn-p 太依赖于读者不知道的你自己的数据结构。见stackoverflow.com/help/mcve
  • 嗨 Tzach,Setszyller,我是 stackoverflow 的新手,不了解协议。简化了 prob 语句。

标签: scala hadoop apache-spark hive


【解决方案1】:

如果你的意思是:

给定一个RDD[(TupleN, TupleM)],我如何将键元组和值元组的每条记录的元素映射到单个串联字符串中?

这是一个简化的版本,你应该可以推断出这个来解决你的问题:

val keyValueRdd = sc.parallelize(Seq(
  (1, "key1") -> (10, "value1", "A"),
  (2, "key2") -> (20, "value2", "B"),
  (3, "key3") -> (30, "value3", "C")
))

val asStrings: RDD[String] = keyValueRdd.map {
  case ((k1, k2), (v1, v2, v3)) => List(k1, k2, v1, v2, v3).mkString(",")
}

asStrings.foreach(println)
// prints:
// 3,key3,30,value3,C
// 2,key2,20,value2,B
// 1,key1,10,value1,A

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2010-11-14
    • 2013-03-27
    相关资源
    最近更新 更多