为了账号安全,请及时绑定邮箱和手机立即绑定

整理Spark中的行

/ 猿问

整理Spark中的行

四季花海 2019-11-14 14:16:08

我正在使用scala做一些火花测试。我们通常会读取需要像以下示例一样处理的json文件:


test.json:


{"a":1,"b":[2,3]}

val test = sqlContext.read.json("test.json")

如何将其转换为以下格式:


{"a":1,"b":2}

{"a":1,"b":3}


查看完整描述

3 回答

?
绝地无双

您可以使用explode功能:


scala> import org.apache.spark.sql.functions.explode

import org.apache.spark.sql.functions.explode



scala> val test = sqlContext.read.json(sc.parallelize(Seq("""{"a":1,"b":[2,3]}""")))

test: org.apache.spark.sql.DataFrame = [a: bigint, b: array<bigint>]


scala> test.printSchema

root

 |-- a: long (nullable = true)

 |-- b: array (nullable = true)

 |    |-- element: long (containsNull = true)


scala> val flattened = test.withColumn("b", explode($"b"))

flattened: org.apache.spark.sql.DataFrame = [a: bigint, b: bigint]


scala> flattened.printSchema

root

 |-- a: long (nullable = true)

 |-- b: long (nullable = true)


scala> flattened.show

+---+---+

|  a|  b|

+---+---+

|  1|  2|

|  1|  3|

+---+---+


查看完整回答
反对 回复 2019-11-14
?
湖上湖

如果sqlContext.implicits._对您不起作用,请import spark.implicits._在范围内尝试。您可能还需要import org.apache.spark.sql.functions.explode

查看完整回答
反对 回复 2019-11-14
?
MMTTMM

尝试import sqlContext.implicits._。您也可以org.apache.spark.sql.functions.col 在上使用和申请DataFrame (df("b"))。

查看完整回答
反对 回复 2019-11-14
  • 3 回答
  • 0 关注
  • 53 浏览
我要回答
慕课专栏
更多

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信