选择(忽略如果不存在)JSON日志Spark SQL



我是Apache spark的新手,并尝试了一些poc。我试图读取json日志是结构化的,但一些字段并不总是保证,例如: { "item": "A", "customerId": 123, "hasCustomerId": true, . . . }, { "item": "B", "hasCustomerId": false, . . . } } 假设我想将这些JSON日志转换为CSV,我正在尝试Spark SQL通过简单的Select语句来获取所有字段,但由于第二个JSON缺少一个字段(尽管它确实有一个标识符),我不确定如何处理这个问题。

我想把上面的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")

最新更新