2017-02-04 5 views
0

Я хотел бы указать схему при чтении из json, но при попытке сопоставить число с Double это терпит неудачу, я пробовал FloatType и IntType без радости!Задание схемы на JSON через Spark

Когда выводя идентификатор схемы клиента устанавливается в строку, и я хотел бы, чтобы бросить его как Double

так df1 поврежден во время df2 показывает

Также FYI мне это нужно, чтобы быть универсальным, как я бы хотели бы применить его к любому JSON, я указал ниже схему в качестве примера вопроса я обращенную

import org.apache.spark.sql.types.{BinaryType, StringType, StructField, DoubleType,FloatType, StructType, LongType,DecimalType} 
val testSchema = StructType(Array(StructField("customerid",DoubleType))) 
val df1 = spark.read.schema(testSchema).json(sc.parallelize(Array("""{"customerid":"535137"}"""))) 
val df2 = spark.read.json(sc.parallelize(Array("""{"customerid":"535137"}"""))) 
df1.show(1) 
df2.show(1) 

Любая помощь будет оценена, я уверен, что я пропускаю что-то очевидное, но для жизни я не могу сказать, что это такое!

Позволь мне прояснить, я загружаю файл, сохраненный с помощью sparkContext.newAPIHadoopRDD

Так преобразования РДДА [JSONObject] к dataframe при применении схемы к нему

ответ

0

Поле Json так обнесено двойные кавычки считаются String. Как о литье столбца в Double ?. это решение для литья может быть сделано общим, если будет предоставлена ​​информация о том, какие столбцы должны быть отправлены в Double.

df1.select(df1("customerid").cast(DoubleType)).show() 
+----------+ 
|customerid| 
+----------+ 
| 535137.0| 
+----------+ 
+0

Hi @ rogue-one, к сожалению, не уверен, как это можно сделать, потому что я загружаю данные из HDFS-подобного хранилища, хранилища Google, если быть точным. Итак, лучший способ, чем сопоставление каждой строки и удаление двойных кавычек? –