2016-07-05 2 views
1

Использование Apache искру в Java, у меня есть:2 значения в массиве в 2 колонки в моей DataFrame

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 

Я попробовал несколько других вещей, без особой удачи ...

ответ

1

Используйте код

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") 
+0

Awesome @Rockie! Я просто изменил обозначение, чтобы быть более Java и менее Scala, используя статический метод col(). Спасибо за вашу помощь! – jgp

Смежные вопросы