在Spark Scala中将所有json字段值接受为String的正确方法是什么?

时间:2018-08-30 08:52:51

标签: scala apache-spark apache-spark-sql

我是Spark的新手,请尝试一下。目前,我有一个用于将json数据加载到Spark中的架构。 json的结构如下:

{
   "value1": 345.2
   "value2": 32
}

我正在使用以下模式读取此json结构:

val myJsonschema = StructType(
        Array(
            StructField("value1", StringType)
            StructField("value2", StringType)
        )
)

我将架构应用为:

val dataFrame_val1_val2 = myDataStream.select(from_json(col("value").cast("string"), myJsonschema).as("data"))

但是,当我检查dataFrame_val1_val2的内容时,我得到的是{"$numberDouble":"345.2"}而不是345.2的双精度值。对于整数,效果很好。

我在这里想念什么?

2 个答案:

答案 0 :(得分:0)

尝试更改架构类型

val schemaJson = new StructType().add(StructField("value1",FloatType)).add(StructField("value2",IntegerType))

json.select(from_json($"json", schemaJson) as "value")
  .withColumn("value1",$"value.value1").withColumn("value2",$"value.value2").drop("value")
  .show( 5 , false)

答案 1 :(得分:0)

就您而言,根本不需要给出架构; Spark将为您推断模式:

spark.read.json(“yourfile.json”).show