java - 数组中的 2 个值到我的 DataFrame 中的 2 列

标签 java apache-spark apache-spark-sql

在 Java 中使用 Apache Spark,我有:

root
 |-- datasetid: string (nullable = true)
 |-- fields: struct (nullable = true)
...
 |    |-- latlon: array (nullable = true)
 |    |    |-- element: double (containsNull = true)

这是基于这个 JSON 片段:

"fields":{
  "latlon":[
    35.9543748,
    -78.9944911
  ],

我试图使用以下方法将数据提取到列中:

df = df.withColumn("lat", df.col("fields.latlon[0]"));
df = df.withColumn("lon", df.col("fields.latlon[1]"));

(我希望您欣赏语法的简洁性)。然而,我必须承认它并没有真正起作用:

No such struct field latlon[1] in 

我尝试了一些其他的东西,但运气不佳......

最佳答案

使用代码

df.withColumn("lat", $"fields.latlon".getItem(0))
  .withColumn("lon", $"fields.latlon".getItem(1))

使用sql

df.registerTempTable("geo")
latlon = sqlContext.sql("select fields.latlon[0] as lat, fields.latlon[1] as lon from geo")

关于java - 数组中的 2 个值到我的 DataFrame 中的 2 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38194908/

相关文章:

java - 调整 JFrame 大小后 JScrollPane 崩溃

amazon-web-services - Spark Streaming 使用 S3 与 Kinesis

python - 如何将 n-grams 组合成 Spark 中的一个词汇表?

java - jfieldID 和 jmethodID 是否绑定(bind)到特定类,或者我可以在子类对象上使用它们吗?

java - 在 Spring boot 中使用 jwt token 实现具有 http 安全性的 CrossOrigin

java - Scala如何将 "None"排序到底部(如果存在)并选择每组中的第一行?

apache-spark - Spark 结构化流中同一数据帧/数据集的多个操作/聚合

scala - 如何在Spark数据帧中执行条件 "withColumn"?

apache-spark - PySpark groupBy 中的中位数/分位数

java - HashMap 到 ArrayList 内存不足