我很难使用Spark 1.4.1为嵌套的gz文件拆分数据帧列的内容。我使用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
我做错了什么?我需要使用此代码对我的数据集进行一些处理并应用一些转换。
答案 0 :(得分:0)
此数据类似于JSON。幸运的是,Spark支持使用Spark SQL
轻松获取JSON数据。来自Spark Documentation:
Spark SQL可以自动推断JSON数据集的架构并将其作为DataFrame加载。可以在String的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函数,您只需要专注于一些字符串解析/操作策略以使其正确。
希望这有帮助。