【问题标题】:Converting RDD(Arrary(String,Int) ) into Json in scala在scala中将RDD(Array(String,Int))转换为Json
【发布时间】:2018-05-15 06:54:33
【问题描述】:

我有一个形式的 RDD: 数组((A,3), (B,5), (C,88))

我想在scala中转换成json格式

{ “一”:3, “乙”:5, “C”:88, }

【问题讨论】:

  • 您使用的是什么版本的 spark?你能把这个RDD转换成DF吗?那会让你的生活更轻松。但要求只有 RDD,那么您可能想尝试 json4s 或类似的
  • Spark 1.6 .. 是的,我尝试使用 toDF() 但它不起作用
  • 如果我们将其转换为 DF ,我们将得到类似 {"_1":"A","_2":3} {"_1":"B","_2" :5} {"_1":"C","_2":88} 这就是你要找的吗?
  • val x: Array[(String, Int)] = Array(("A",3), ("B",5), ("C",88)) val distData: RDD [(String, Int)] = sparkSession.sparkContext.parallelize(x) val df: DataFrame = sparkSession.sqlContext.createDataFrame(distData) df.write.json("resources/myJson.json") }

标签: json scala rdd


【解决方案1】:

如果你有RDD[Array[Tuple2[String, Int]]]

val rdd = sc.parallelize(Seq(Array(("A",3), ("B",5), ("C",88))))

那么你可以执行以下操作来获得你想要的json格式

val columnName = rdd.map(x => x.map(_._1)).first().toSeq
rdd.map(x => x.map(_._2)).map(arr => (arr(0), arr(1), arr(2))).toDF(columnName:_*).toJSON.foreach(x => println(x.toString))

这应该给你

{"A":3,"B":5,"C":88}

【讨论】:

  • 如果我只想打印字符串值怎么办。喜欢:A,B,C
  • 您的意思是说您只想过滤A、B、C?请说清楚。 @HemantKumar
  • 您要过滤什么?您可以在数据框级别进行过滤。 :) 有 .filter api
  • 所以,我必须把它转换成Dataframe
  • rdd.map(x => x.map(_._2)).map(arr => (arr(0), arr(1), arr(2))).toDF(columnName:_*) 在我的回答中已经是一个数据框了:)
猜你喜欢
  • 2020-08-17
  • 2018-11-26
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
相关资源
最近更新 更多