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

标签 java apache-spark apache-spark-sql

有没有一种简单的方法如何在 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/

相关文章:

java - 无法从 GPS 检查返回 boolean 值

scala - scala 中的 Apache Spark 中不支持的文字类型类

scala - 如何将任何新库(如 spark-sftp)添加到我的 Pyspark 代码中?

java - 如何指定在 NSMenuItem(最小化窗口指示器)中显示菱形?

java - 如何使用 Struts2 和 Hibernate 删除和修改数据

java - 我如何启用/禁用 Android 上的以太网连接?

java - 在 Windows 上安装 Spark 不起作用

apache-spark - Spark GBTClassifier 始终以 100% 的准确率进行预测

java - 如何将选定的列写入 Kafka 主题?

scala - Spark 2.3 (Scala) - 将时间戳列从 UTC 转换为另一列中指定的时区