当前位置: 首页 > 知识库问答 >
问题:

如何在Spark中将数组分解为多列

司寇旺
2023-03-14

我有一个火花数据帧看起来像:

id   DataArray
a    array(3,2,1)
b    array(4,2,1)     
c    array(8,6,1)
d    array(8,2,4)

我想将此数据帧转换为:

id  col1  col2  col3
a    3     2     1
b    4     2     1
c    8     6     1 
d    8     2     4

我应该使用什么功能?

共有2个答案

易和怡
2023-03-14

您可以使用foldLeft列添加到数据数组

列出要添加的列名

val columns = List("col1", "col2", "col3")

columns.zipWithIndex.foldLeft(df) {
  (memodDF, column) => {
    memodDF.withColumn(column._1, col("dataArray")(column._2))
  }
}
  .drop("DataArray")

希望这有所帮助!

巫马浩言
2023-03-14

使用应用

import org.apache.spark.sql.functions.col

df.select(
  col("id") +: (0 until 3).map(i => col("DataArray")(i).alias(s"col$i")): _*
)
 类似资料:
  • 问题内容: 我正在尝试解析如下的JSON 到[[“ Jack”,“ Jones”,“ Rock”,“ Taylor”,“ Rob”],[“ Rose”,“ John”],[“ Ted”]]的数组 这是数组的数组。 我尝试了下面的代码 当我打印“人”时,我得到o / p为 我很困惑当“人物”重复3次时如何解析 尝试在UITableView中显示内容,其中第一个单元格具有“ Jack” ..“ Rob

  • 问题内容: 运行此查询时: 我得到一个这样的表: 我现在想做的是获取相同的信息,但是将数组分成几行,所以我得到的结果是这样的: 如您所见,我不想在“ selected_placements”中获取具有空值的行。 我正在使用PostgreSQL 8.0.2。 非常感谢! 问题答案: 我建议您升级Postgres版本。所有受支持的版本均支持: 在早期版本中,您可以尝试一次将它们选出来。尽管已在9.5中

  • 问题内容: 我的要求很简单,但是我需要做很多事情,因此我正在寻找可靠的解决方案。 是否有一个很好的轻量级库,用于将URL分解为Java中的组成部分?我指的是主机名,查询字符串等。 问题答案: 看一看java.net.URL。它具有完全符合您要执行的操作的方法。 主机名: 查询字符串: Fragment / ref / anchor: 路径:

  • 问题内容: 我的问题是我有一个这样的表: c1 | c2 | c3 | c4是一个由|分隔的值。 我的最终结果应如下所示: 我该怎么做呢? 谢谢 问题答案: 这就是您可以执行的操作,使用管道将字符串拆分并使用spark函数爆炸数据 输出: 希望这可以帮助!

  • 在Bash脚本中,我希望将一行拆分为几个部分,并将它们存储在数组中。 例如,给定行: 我希望得到的数组如下所示: 一个简单的实现是优选的;速度不重要。我该怎么做呢?

  • 我有一个包含结构数组的嵌套源json文件。结构的数量因行而异,我想使用Spark(scala)从结构的键/值动态创建新的数据框架列,其中键是列名,值是列值。 这里有一个由3个结构组成的数组,但这3个结构需要动态地拆分为3个单独的列(3个的数量可能会有很大的变化),我不知道如何做到这一点。 请注意,数组中的每个数组元素都产生了3个新列。 我认为理想的解决方案与本SO帖子中讨论的类似,但有两个主要区别