【问题标题】:How to use explode function for arrays in scala如何在scala中对数组使用explode函数
【发布时间】:2021-08-31 16:14:29
【问题描述】:

我有以下数据框:

_name data
Test {[{0, 0, 1, 0 }]}

我希望输出为:

allNames data
Test 0
Test 0
Test 1
Test 1

我尝试了explode函数,但是下面的代码只是返回了与上面相同的数据帧,只是标题发生了变化。如何更改代码以获得预期的输出?

  val t = cabinetDF.select(col("_attrname").as("allNames"),functions.explode(array(col("ROWDATA"))))
  t.show(false)

【问题讨论】:

  • 什么是{[{0, 0, 1, 0 }]}?这看起来不像是有效的 Spark 数据类型。
  • 我使用结构类型从 XML 读取数据,这就是我得到的。需要先转成数组吗?

标签: scala dataframe function apache-spark


【解决方案1】:

这对我有用,但是我正在创建一个普通数组。我不知道为什么你的被额外的一组花括号和一组额外的方括号括起来:

import org.apache.spark.sql.functions._
import spark.sqlContext.implicits._

val df = Seq( ("Test", Array( 0, 0, 1, 0 ) ) )
  .toDF("_name", "data")

df.show

val df2 = df
  .withColumn("x", explode($"data"))
  .select("_name", "x")
  
df2.show

我的结果:

也许你需要先解压它,或者首先看看它是如何创建的。

【讨论】:

  • 我使用结构类型从 XML 读取数据,这是我得到的格式,知道如何摆脱这些吗?
猜你喜欢
  • 2020-06-15
  • 2017-08-05
  • 2019-03-11
  • 1970-01-01
  • 2021-12-22
  • 2014-10-14
  • 2021-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多