在scala spark中处理flexible-schema json时如何处理缺少的列?

时间:2018-03-07 07:27:54

标签: scala apache-spark apache-kafka spark-streaming

使用spark streaming从kafka消息中读取V = Json事件。

Json的架构未被强制执行,因此您可能会获取以下2个事件:

{"foo": "01/01/1973","bar": "d,e"}
{"foo": "01/01/1974"}

使用read.jsondf.registerTempTable("tempTable") 如果字段不存在,如何创建插入NULL的query = "select foo, bar from tempTable"

*使用spark 1.6,但也很高兴听到spark2

2 个答案:

答案 0 :(得分:1)

为了处理空值,您可以使用na functions。它可以在Spark 1.6中使用。例如,在您的情况下,您可以使用fill函数,它通过读取json文件创建Dataframe后,用默认值替换null或不存在的值:

df.na.fill("NULL", Seq("bar")).registerTempTable("tempTable")

第一个参数是默认值,第二个参数是Seq或Array对象,其中包含要填充的列名称。

希望它有所帮助!

答案 1 :(得分:1)

如果你可以使用spark 2.x,你不需要关心处理空值示例:

spark.read.json("test.json").registerTempTable("tempTable")
spark.sql("select foo, bar from tempTable")

输出:

+----------+----+
|       foo| bar|
+----------+----+
|01/01/1973| d,e|
|01/01/1974|null|
+----------+----+