Jac*_*ski 11
spark.sql.functions.explodeexplode 函数为给定数组或映射列(在DataFrame中)中的每个元素创建一个新行.
val signals: DataFrame = spark.read.json(signalsJson)
signals.withColumn("element", explode($"data.datapayload"))
Run Code Online (Sandbox Code Playgroud)
explode创建一个列.
请参阅函数对象和如何在DataFrame中展开数组(来自JSON)中的示例?
Dataset<Row> explode/ flatMapoperator(方法)explode操作员几乎是explode功能.
来自scaladoc:
explode返回一个新的数据集,其中单个列已被提供的函数扩展为零或更多行.这类似于HiveQL中的LATERAL VIEW.输入行的所有列都与函数输出的每个值隐式连接.
ds.flatMap(_.words.split(" "))
Run Code Online (Sandbox Code Playgroud)
请注意(再次引用scaladoc):
不推荐使用(自版本2.0.0)使用
flatMap()或select()与functions.explode()替代
请参阅数据集API以及如何使用类型化数据集将多值列拆分为单独的行中的示例?
尽管explode被弃用(我们可以将主要问题转换为explode函数和flatMap运算符之间的差异),但不同之处在于前者是函数而后者是运算符.它们具有不同的签名,但可以给出相同的结果.这往往导致讨论更好,通常归结为个人偏好或编码风格.
人们也可以说flatMap(即explode运算符)更多的是Scala-ish,因为flatMapScala编程中普遍存在(主要隐藏在for-comprehension之后).
| 归档时间: |
|
| 查看次数: |
24223 次 |
| 最近记录: |