有没有一种简单的方法如何在 SparkSQL DataFrame
的数组列上使用 explode
?在 Scala 中相对简单,但是在 Java 中这个功能似乎不可用(如 javadoc 中所述)。
一种选择是在查询中使用 SQLContext.sql(...)
和 explode
函数,但我正在寻找更好、更简洁的方法. DataFrame
s 是从 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/