在Spark Scala中,接受所有json字段值作为字符串的正确方法是什么?
我是一个新的火花和尝试一些手。目前,我使用一个模式将json数据加载到Spark中。json的结构如下所示:在Spark Scala中,接受所有json字段值作为字符串的正确方法是什么?,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我是一个新的火花和尝试一些手。目前,我使用一个模式将json数据加载到Spark中。json的结构如下所示: { "value1": 345.2 "value2": 32 } 我使用以下模式来读取此json结构: val myJsonschema = StructType( Array( StructField("value1", StringType) StructField("value2", StringType
{
"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\u val1\u val2
的内容时,我得到的是两个值,即{“$numberDouble”:“345.2”}
,而不仅仅是345.2
。因为整数可以正常工作
这里缺少什么?尝试更改架构类型
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)
在您的情况下,根本不需要给出模式;Spark将为您推断模式:
spark.read.json(“yourfile.json”).show
我希望始终捕获为字符串,因为value1和value2的值不一致。因此,我只想将它们捕获为字符串。