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

问题描述 投票:0回答:2

我是Spark的新手并且尝试了一些。目前,我有一个模式,我使用它将json数据加载到Spark中。 json的结构如下:

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

我使用以下Schema来读取这个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的双倍值。对于整数工作正常。

我在这里错过了什么?

scala apache-spark apache-spark-sql
2个回答
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)

0
投票

在您的情况下,根本不需要提供架构; Spark会为你推断架构:

spark.read.json(“yourfile.json”).show
© www.soinside.com 2019 - 2024. All rights reserved.