[英]splitting contents of a dataframe column using Spark 1.4 for nested json data
[英]Splitting contents of a dataframe column using Spark 1.4.1 for nested gz file
我在使用Spark 1.4.1嵌套gz文件拆分dataframe列的内容时遇到困难。 我使用了map函数来映射gz文件的属性。
数据采用以下格式:
"id": "tag:1234,89898",
"actor":
{
"objectType": "person",
"id": "id:1234",
"link": "http:\wwww.1234.com/"
},
"body",
我正在使用以下代码拆分列并读取数据文件。
val dataframe= sc.textFile(("filename.dat.gz")
.toString())
.map(_.split(","))
.map(r => {(r(0), r(1),r(2))})
.toDF()
dataframe.printSchema()
但是结果是这样的:
root
--- _1: string (nullable = true)
--- _2: string (nullable = true)
--- _3: string (nullable = true)
这是不正确的格式。 我希望架构采用以下格式:
----- id
----- actor
---objectType
---id
---link
-----body
做错什么了吗? 我需要使用此代码对数据集进行一些处理,并应用一些转换。
此数据看起来像JSON。 幸运的是,Spark支持使用Spark SQL
轻松提取JSON数据。 从Spark文档 :
Spark SQL可以自动推断JSON数据集的架构并将其作为DataFrame加载。 可以在字符串的RDD或JSON文件上使用SQLContext.read.json()进行此转换。
这是文档中示例的修改版本
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val myData = sc.textFile("myPath").map(s -> makeValidJSON(s))
val myNewData = sqlContext.read.json(myData)
// The inferred schema can be visualized using the printSchema() method.
myNewData.printSchema()
对于makeValidJSON函数,您只需要专注于一些字符串解析/操作策略即可使其正确。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.