在 spark 中使用数据集 api 提取对象中的嵌套对象
Extract nested objects in an object using dataset api in spark
我是 Spark 的新手,我正在尝试数据集 api,我想知道是否可以使用数据集 api.[= 提取对象中的嵌套对象21=]
例如,假设我有一个 A 类型的对象和一个 B 类型的对象,如下所示
case class A(a: String, b: Integer)
case class B(c: Array[A])
我有一个包含 class B 对象的数据集:数据集[B]
我想应用一些转换来获取最终数据集中 A 类型的所有对象:Dataset[A]
我试过了,但它不起作用
bs.map(b => b.a.map(x => x))
有人有想法吗?
提前致谢
您可以先将 B's Array[A]
分解成行并将它们转换为 DataSet[A]
## 'bs' Dataset
+--------------------------+
|c |
+--------------------------+
|[[value1, 1], [value2, 2]]|
+--------------------------+
val testDF = bs.select(explode($"c"))
## 'testDF' Dataframe
+-----------+
| col|
+-----------+
|[value1, 1]|
|[value2, 2]|
+-----------+
val asDF = test_df.withColumn("a", col("col.a")).withColumn("b", col("col.b")).drop("col").as[A]
## 'asDF' Dataset
+------+---+
| a| b|
+------+---+
|value1| 1|
|value2| 2|
+------+---+
我是 Spark 的新手,我正在尝试数据集 api,我想知道是否可以使用数据集 api.[= 提取对象中的嵌套对象21=]
例如,假设我有一个 A 类型的对象和一个 B 类型的对象,如下所示
case class A(a: String, b: Integer)
case class B(c: Array[A])
我有一个包含 class B 对象的数据集:数据集[B]
我想应用一些转换来获取最终数据集中 A 类型的所有对象:Dataset[A]
我试过了,但它不起作用
bs.map(b => b.a.map(x => x))
有人有想法吗?
提前致谢
您可以先将 B's Array[A]
分解成行并将它们转换为 DataSet[A]
## 'bs' Dataset
+--------------------------+
|c |
+--------------------------+
|[[value1, 1], [value2, 2]]|
+--------------------------+
val testDF = bs.select(explode($"c"))
## 'testDF' Dataframe
+-----------+
| col|
+-----------+
|[value1, 1]|
|[value2, 2]|
+-----------+
val asDF = test_df.withColumn("a", col("col.a")).withColumn("b", col("col.b")).drop("col").as[A]
## 'asDF' Dataset
+------+---+
| a| b|
+------+---+
|value1| 1|
|value2| 2|
+------+---+