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

时间:2016-08-17 05:33:57

标签: json apache-spark apache-spark-sql apache-spark-mllib apache-spark-ml

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

我想将上面的json日志转换为

item, customerId, ....

 A  ,   123     , ....

 B  ,   null/0  , ....

1 个答案:

答案 0 :(得分:-1)

您应该使用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")