相关疑难解决方法(0)

如何使用类型化数据集将多值列拆分为单独的行?

我面临的问题是如何拆分多值列,即List[String]分成不同的行.

初始数据集具有以下类型: Dataset[(Integer, String, Double, scala.List[String])]

+---+--------------------+-------+--------------------+
| id|       text         | value |    properties      |
+---+--------------------+-------+--------------------+
|  0|Lorem ipsum dolor...|    1.0|[prp1, prp2, prp3..]|
|  1|Lorem ipsum dolor...|    2.0|[prp4, prp5, prp6..]|
|  2|Lorem ipsum dolor...|    3.0|[prp7, prp8, prp9..]|
Run Code Online (Sandbox Code Playgroud)

生成的数据集应具有以下类型:

Dataset[(Integer, String, Double, String)]
Run Code Online (Sandbox Code Playgroud)

properties应拆分这样的:

+---+--------------------+-------+--------------------+
| id|       text         | value |    property        |
+---+--------------------+-------+--------------------+
|  0|Lorem ipsum dolor...|    1.0|        prp1        |
|  0|Lorem ipsum dolor...|    1.0|        prp2        |
|  0|Lorem ipsum dolor...|    1.0|        prp3        |
|  1|Lorem …
Run Code Online (Sandbox Code Playgroud)

scala apache-spark apache-spark-dataset

7
推荐指数
1
解决办法
3192
查看次数

如何在 DataFrame 中展开数组(来自 JSON)?

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)

scala dataframe apache-spark apache-spark-sql

4
推荐指数
1
解决办法
3457
查看次数