2016-04-14 26 views
0

Bir DataFrame'im var ve sütunlarından biri bir JSON dizesi içeriyor. Şimdiye kadar, yönteminin gerektirdiği gibi arayüzünü uygulamıştım: Function<Row,Row>(). Bu işlev içinde JSON'u ayrıştırıyorum ve JSON'daki değerlerden ek sütunları olan yeni bir satır oluşturuyorum.Spark Satırları için yeni şema tanımlama

Orjinal sıra:: my fonksiyonunun uygulanmasının ardından

+------+-----------------------------------+ 
| id |  json      | 
+------+-----------------------------------+ 
| 1 | {"id":"abcd", "name":"dmux",...} | 
+------------------------------------------+ 

: Örneğin döndü JavaRDD yeni DataFrame oluşturulmaya çalışılırken

+------+----------+-----------+ 
| id | json_id | json_name | 
+------+----------+-----------+ 
| 1 | abcd  | dmux  | 
+-----------------+-----------+ 

Ben de belaya çalıştırıyorum. Şimdi bu yeni satırlarım var, bir şema oluşturmam gerekiyor. Şema JSON yapısına büyük ölçüde bağımlıdır, bu yüzden şema verilerini nesnesiyle birlikte işlevden geri aktarmanın bir yolunu bulmaya çalışıyorum. SparkContext işlevine geçirilmediğinden broadcast değişkenlerini kullanamıyorum.

Function numaralı telefondaki bir satırdaki her sütunda döngü yapmaktan başka hangi seçeneklerim var?

cevap

2

StructType modelini oluşturabilirsiniz. Bu Scala, ama aynı şekilde çalışır olacaktır:

val newSchema = StructType(Array(
    StructField("id", LongType, false), 
    StructField("json_id", StringType, false), 
    StructField("json_name", StringType, false) 
)) 

val newDf = sqlContext.createDataFrame(rdd, newSchema) 

arada, senin rdd tip RDD[Row] ait olduğundan emin olmak gerekir.

+0

David, Şu an arayan yönteminde StructType kullanıyorum, ancak JSON'umda hangi StructFields'ların olacağını bilmiyorum. – dmux

+0

'JSON' şeması satırdan satırın aynısı mı? Daha iyi olmalı ya da istediğini yapamazsın. –

+0

Her satır için aynıdır, ancak veri çerçevesinden veri alanına farklılık gösterebilir. – dmux