gpt4 book ai didi

apache-spark - 如何将一行数组平面映射为多行?

转载 作者:行者123 更新时间:2023-12-04 17:33:52 25 4
gpt4 key购买 nike

解析一些jsons后,我有一个一列的数组DataFrame

scala> val jj =sqlContext.jsonFile("/home/aahu/jj2.json")
res68: org.apache.spark.sql.DataFrame = [r: array<bigint>]
scala> jj.first()
res69: org.apache.spark.sql.Row = [List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)]

我想将每一行分解成几行。如何?

编辑:

原始json文件:
{"r": [0,1,2,3,4,5,6,7,8,9]}
{"r": [0,1,2,3,4,5,6,7,8,9]}

我想要一个 20 行的 RDD 或 DataFrame。

我不能在这里简单地使用 flatMap - 我不确定 spark 中合适的命令是什么:
scala> jj.flatMap(r => r)
<console>:22: error: type mismatch;
found : org.apache.spark.sql.Row
required: TraversableOnce[?]
jj.flatMap(r => r)

最佳答案

您可以使用 DataFrame.explode实现你的愿望。以下是我在 spark-shell 中使用您的示例 json 数据尝试的内容。

import scala.collection.mutable.ArrayBuffer
val jj1 = jj.explode("r", "r1") {list : ArrayBuffer[Long] => list.toList }
val jj2 = jj1.select($"r1")
jj2.collect

可以引用API文档了解更多 DataFrame.explode

关于apache-spark - 如何将一行数组平面映射为多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30833618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com