我是Apache spark的新手,并尝试了一些poc。我试图读取json日志是结构化的,但一些字段并不总是保证,例如:
{
"item": "A",
"customerId": 123,
"hasCustomerId": true,
.
.
.
},
{
"item": "B",
"hasCustomerId": false,
.
.
.
}
}
假设我想将这些JSON日志转换为CSV,我正在尝试Spark SQL通过简单的Select语句来获取所有字段,但由于第二个JSON缺少一个字段(尽管它确实有一个标识符),我不确定如何处理这个问题。
item, customerId, ....
A , 123 , ....
B , null/0 , ....
你应该使用SqlContext来读取JOSN文件,sqlContext.read.json("file/path")
,但是如果你想把它转换成CSV,然后你想用缺失的值读取它。您的CSV文件应该看起来像
item,customerId,hasCustomerId, ....
A,123,, .... // hasCustomerId is null
B,,888, .... // customerId is null
。空记录。然后你要像这样读
val df = sqlContext.read
.format("com.databricks.spark.csv")
.option("header", "true") // Use first line of all files as header
.option("inferSchema", "true") // Automatically infer data types
.load("file/path")