gpt4 book ai didi

java - SparkSQL 并在 Java 中的 DataFrame 上爆炸

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:30:19 25 4
gpt4 key购买 nike

有没有一种简单的方法如何在 SparkSQL DataFrame 的数组列上使用 explode?在 Scala 中相对简单,但是在 Java 中这个功能似乎不可用(如 javadoc 中所述)。

一种选择是在查询中使用 SQLContext.sql(...)explode 函数,但我正在寻找更好、更简洁的方法. DataFrames 是从 parquet 文件中加载的。

最佳答案

我以这种方式解决了它:假设您有一个数组列,其中包含名为“职位”的职位描述,每个人都有“全名”。

然后你从初始模式中得到:

root
|-- fullName: string (nullable = true)
|-- positions: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- companyName: string (nullable = true)
| | |-- title: string (nullable = true)
...

到架构:

root
|-- personName: string (nullable = true)
|-- companyName: string (nullable = true)
|-- positionTitle: string (nullable = true)

通过做:

    DataFrame personPositions = persons.select(persons.col("fullName").as("personName"),
org.apache.spark.sql.functions.explode(persons.col("positions")).as("pos"));

DataFrame test = personPositions.select(personPositions.col("personName"),
personPositions.col("pos").getField("companyName").as("companyName"), personPositions.col("pos").getField("title").as("positionTitle"));

关于java - SparkSQL 并在 Java 中的 DataFrame 上爆炸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31859271/

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