首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spark Streaming xml文件

Spark Streaming xml文件
EN

Stack Overflow用户
提问于 2016-11-18 22:43:39
回答 1查看 2K关注 0票数 2

我需要处理流到S3文件夹中的xml文件。目前,我已经实现了如下内容。

首先,使用Spark的fileStream读取文件

val data = ssc.fileStream[LongWritable, Text, TextInputFormat]("s3://myfolder/",(t: org.apache.hadoop.fs.Path) => true, newFilesOnly = true, hadoopConf).map(_._2.toString())

对于每个RDD,检查是否已读取任何文件

代码语言:javascript
复制
if (data.count() !=0)

将字符串写入新的HDFS目录

代码语言:javascript
复制
data.coalesce(1).saveAsTextFile(sdir);

从上述HDFS目录创建Dataframe读取

代码语言:javascript
复制
val loaddata = sqlContext.read.format("com.databricks.spark.xml").option("rowTag", "Trans").load(sdir)

对Dataframe进行一些处理并另存为JSON

代码语言:javascript
复制
loaddata.write.mode("append").json("s3://mybucket/somefolder")

不知何故,我觉得上面的方法是非常低效的,坦率地说,很像学生时代的孩子。有没有更好的解决方案?任何帮助都将不胜感激。

接下来的问题:如何操作数据帧中的字段(而不是列)?我有一个非常复杂的嵌套xml,当我使用上面描述的方法时,我得到了一个包含9列和50多个内部Struct数组的Dataframe。这是很好的,除了需要修剪某些字段名称。有没有一种方法可以在不爆炸数据帧的情况下实现这一点,因为我需要再次构造相同的结构?

EN

回答 1

Stack Overflow用户

发布于 2016-11-18 23:41:45

如果你使用Spark 2.0,你也许能够让它与结构化流媒体一起工作:

代码语言:javascript
复制
val inputDF = spark.readStream.format("com.databricks.spark.xml")
  .option("rowTag", "Trans")
  .load(path)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40679817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档