【问题标题】:Spark RDD map internal object to RowSpark RDD 将内部对象映射到 Row
【发布时间】:2016-03-24 14:20:42
【问题描述】:

我的 CSV 文件中的初始数据是:

1 ,21658392713 ,21626890421 
1 ,21623461747 ,21626890421 
1 ,21623461747 ,21626890421 

我根据业务逻辑经过几次转换和分组后得到的数据是收益

scala> val sGrouped = grouped
sGrouped: org.apache.spark.rdd.RDD[(String, Iterable[(String,    
(Array[String], String))])] = ShuffledRDD[85] at groupBy at <console>:51

scala> sGrouped.foreach(f=>println(f))
(21626890421,CompactBuffer((21626890421, 
             ([Ljava.lang.String;@62ac8444,21626890421)), 
             (21626890421,([Ljava.lang.String;@59d80fe,21626890421)),       
             (21626890421,([Ljava.lang.String;@270042e8,21626890421)), 

从这里我想得到一个生成类似以下格式的地图

[String, Row[String]] 

因此数据可能如下所示:

[ 21626890421 , Row[(1 ,21658392713 ,21626890421)
              , (1 ,21623461747 ,21626890421)
              ,  (1 ,21623461747,21626890421)]]

我非常感谢任何有关推进这方面的指导。

【问题讨论】:

  • 你想要一个 Row 还是一个 Array 就足够了?
  • 没有Row[String] 这样的东西。来自(Array[String], String)Array 究竟是什么映射到您想要的输出?

标签: scala apache-spark


【解决方案1】:

我找到了答案,但我不确定这是否是一种有效的方法,任何更好的方法都值得赞赏,因为这感觉更像是一种 hack。

scala> import org.apache.spark.sql.Row
scala> val grouped = cToP.groupBy(_._1)
grouped: org.apache.spark.rdd.RDD[(String, Iterable[(String,
(Array[String], String))])] 

scala> val sGrouped = grouped.map(f => f._2.toList)
sGrouped: org.apache.spark.rdd.RDD[List[(String, (Array[String],    
String))]]


scala> val tGrouped = sGrouped.map(f =>f.map(_._2).map(c => 
Row(c._1(0), c._1(12), c._1(18))))
tGrouped: org.apache.spark.rdd.RDD[List[org.apache.spark.sql.Row]] = 
MapPartitionsRDD[42] a

scala> tGrouped.foreach(f => println(f))

产量

List([1,21658392713,21626890421], [1,21623461747,21626890421],    
[1,21623461747,21626890421])
scala> tGrouped.count()
res6: Long = 1

我得到的答案是正确的,甚至计数也是正确的。但是,我不明白为什么计数是 1。

【讨论】:

  • 您产生键/值对,在您的情况下,只有一对,如您的输出所示。您的键/值对中的值是一个列表,但它不是您计算的那个列表。
猜你喜欢
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多