我有嵌套字符串,如下所示.我想平面映射它们以在Spark中生成唯一的行
我的数据框有
A,B,"x,y,z",D
Run Code Online (Sandbox Code Playgroud)
我想将其转换为生成输出
A,B,x,D
A,B,y,D
A,B,z,D
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点.
基本上我如何做平面地图并在Dataframe中应用任何功能
谢谢
RDD 中的每条记录都包含一个 json。我正在使用 SQLContext 从 Json 创建一个 DataFrame,如下所示:
val signalsJsonRdd = sqlContext.jsonRDD(signalsJson)
Run Code Online (Sandbox Code Playgroud)
下面是架构。datapayload 是一个项目数组。我想分解项目数组以获得一个数据框,其中每一行都是数据有效负载中的一个项目。我尝试根据这个答案做一些事情,但似乎我需要在case Row(arr: Array[...])语句中对项目的整个结构进行建模。我可能错过了一些东西。
val payloadDfs = signalsJsonRdd.explode($"data.datapayload"){
case org.apache.spark.sql.Row(arr: Array[String]) => arr.map(Tuple1(_))
}
Run Code Online (Sandbox Code Playgroud)
上面的代码抛出了 scala.MatchError,因为实际 Row 的类型与 Row(arr: Array[String]) 有很大不同。可能有一种简单的方法可以做我想做的事,但我找不到它。请帮忙。
架构如下
signalsJsonRdd.printSchema()
root
|-- _corrupt_record: string (nullable = true)
|-- data: struct (nullable = true)
| |-- dataid: string (nullable = true)
| |-- datapayload: array (nullable = true)
| | |-- element: struct (containsNull = true)
| | | |-- Reading: struct …Run Code Online (Sandbox Code Playgroud)