【问题标题】:spark join: parenthesis issue火花加入:括号问题
【发布时间】:2016-01-22 22:42:06
【问题描述】:

我要加入两个 RDD。

样本文件1数据:

245216  123422,187,235,742,1635,5600,2782,52,140943

样本文件2数据:

281216  12433,308,454,27862,2693,4578,138812,567,20,716

现在是代码:

rdd1 = sc.textFile("file1").map(_.split("\t")).map(line => (line(0), line(1)))
rdd2 = sc.textFile("file2").map(_.split("\t")).map(line => (line(0), line(1)))
val merged = rdd1.join(rdd2)    

o/p 是 k, (v),我想在进行进一步处理时消除值周围的括号。我尝试了一些东西,包括

val merged_no_paren = merged.map { case (k, (v)) => (k, v) }

我也保存结果:

 merged_no_paren.map{case x=>s"${x._1}\t${x._2}"}.saveAsTextFile("merged")

很遗憾,结果始终采用以下格式:

100   (1,50,200)
120   (2,25,789)
....

我希望它们为:

100   1,50,200
120   2,25,789

【问题讨论】:

  • 给我们 rdd1 和 rdd2 的输入
  • 刚刚用该信息更新了问题。
  • 你加入什么?
  • 这个join 不能工作 - 请发布您实际使用的代码。
  • 我已经更新了代码。

标签: scala apache-spark


【解决方案1】:

您加入后的 RDD 类型为 RDD[(String, (String, String))]。如果您只打印(String, String),它会用括号打印。但是您可以将其拆开并以任何您喜欢的方式打印。

scala> val s = Seq(("1", ("2", "3")))
s: Seq[(String, (String, String))] = List((1,(2,3)))

scala> for (e <- s) println(e)
(1,(2,3))

scala> for ((k, v) <- s) println(s"$k $v")
1 (2,3)

scala> for ((k, (v1, v2)) <- s) println(s"$k $v1,$v2")
1 2,3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-21
    • 2019-10-11
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    相关资源
    最近更新 更多