繁体   English   中英

使用Spark 1.4.1对嵌套的gz文件拆分数据框列的内容

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM