Apache Spark社区为扩展Spark付出了很多努力。 最近,我们希望将XML数据集转换为更易于查询的内容。 我们主要对每天进行的数十亿笔交易之上的数据探索感兴趣。 XML是一种众所周知的格式,但是有时使用起来可能很复杂。 例如,在Apache Hive中,我们可以定义XML模式的结构,然后使用SQL查询它。

但是,我们很难跟上XML结构的更改,因此放弃了先前的选项。 我们正在使用Spark Streaming功能将这些事务引入我们的集群,并且我们正在考虑在Spark中进行所需的转换。 但是,仍然存在相同的问题,因为每次XML结构更改时我们都必须更改Spark应用程序。

肯定有另一种方式!

有一个来自社区的Apache Spark软件包,我们可以用来解决这些问题。 在此博客文章中,我将向您介绍如何使用社区中的Apache Spark包将任何XML文件读入DataFrame。

让我们加载Spark shell并查看示例:

./spark-shell — packages com.databricks:spark-xml_2.10:0.3.3

在这里,我们只是将XML包添加到了我们的Spark环境中。 当然,可以在编写Spark应用并将其打包到jar文件中时添加。

使用该包,我们可以将任何XML文件读入DataFrame。 在加载DataFrame时,我们可以指定数据的架构,但这首先是我们的主要关注点,因此我们将让Spark进行推断。 DataFrame模式的推断是一个非常强大的技巧,因为我们不再需要了解该模式,因此它可以随时更改。

让我们看看如何将XML文件加载到DataFrame中:

val df = sqlContext.read.format("com.databricks.spark.xml").option("rowTag", "OrderSale").load("~/transactions_xml_folder/")df.printSchema

打印DataFrame架构使我们对推理系统做了什么有所了解。

root|-- @ApplicationVersion: string (nullable = true)|-- @BusinessDate: string (nullable = true)|-- @Change: double (nullable = true)|-- @EmployeeId: long (nullable = true)|-- @EmployeeName: string (nullable = true)|-- @EmployeeUserId: long (nullable = true)|-- @MealLocation: long (nullable = true)|-- @MessageId: string (nullable = true)|-- @OrderNumber: long (nullable = true)|-- @OrderSourceTypeId: long (nullable = true)|-- @PosId: long (nullable = true)|-- @RestaurantType: long (nullable = true)|-- @SatelliteNumber: long (nullable = true)|-- @SpmHostOrderCode: string (nullable = true)|-- @StoreNumber: long (nullable = true)|-- @TaxAmount: double (nullable = true)|-- @TaxExempt: boolean (nullable = true)|-- @TaxInclusiveAmount: double (nullable = true)|-- @TerminalNumber: long (nullable = true)|-- @TimeZoneName: string (nullable = true)|-- @TransactionDate: string (nullable = true)|-- @TransactionId: long (nullable = true)|-- @UTCOffSetMinutes: long (nullable = true)|-- @Version: double (nullable = true)|-- Items: struct (nullable = true)|    |-- MenuItem: struct (nullable = true)|    |    |-- #VALUE: string (nullable = true)|    |    |-- @AdjustedPrice: double (nullable = true)|    |    |-- @CategoryDescription: string (nullable = true)|    |    |-- @DepartmentDescription: string (nullable = true)|    |    |-- @Description: string (nullable = true)|    |    |-- @DiscountAmount: double (nullable = true)|    |    |-- @Id: long (nullable = true)|    |    |-- @PLU: long (nullable = true)|    |    |-- @PointsRedeemed: long (nullable = true)|    |    |-- @Price: double (nullable = true)|    |    |-- @PriceLessIncTax: double (nullable = true)|    |    |-- @PriceOverride: boolean (nullable = true)|    |    |-- @ProductivityUnitQuantity: double (nullable = true)|    |    |-- @Quantity: long (nullable = true)|    |    |-- @TaxAmount: double (nullable = true)|    |    |-- @TaxInclusiveAmount: double (nullable = true)|-- OrderTaxes: struct (nullable = true)|    |-- TaxByImposition: struct (nullable = true)|    |    |-- #VALUE: string (nullable = true)|    |    |-- @Amount: double (nullable = true)|    |    |-- @ImpositionId: long (nullable = true)|    |    |-- @ImpositionName: string (nullable = true)|-- Payments: struct (nullable = true)|    |-- Payment: struct (nullable = true)|    |    |-- #VALUE: string (nullable = true)|    |    |-- @AccountIDLast4: string (nullable = true

此时,我们可以使用任何SQL工具通过Spark SQL查询XML。 请阅读这篇文章( Apache Spark作为分布式SQL引擎 )以了解有关Spark SQL的更多信息。 更进一步,我们可以使用可以读取JSON格式的数据的工具。 如果您拥有Apache Drill之类的东西,拥有JSON数据集就特别有用。

如果您对使用此Apache Spark软件包将XML文件读入DataFrame有任何疑问,请在下面的评论部分中询问他们。

翻译自: https://www.javacodegeeks.com/2016/08/apache-spark-packages-xml-json.html

Apache Spark软件包,从XML到JSON相关推荐

  1. apache spark_Apache Spark软件包,从XML到JSON

    apache spark Apache Spark社区为扩展Spark付出了很多努力. 最近,我们希望将XML数据集转换为更易于查询的内容. 我们主要对每天进行的数十亿笔交易之上的数据探索感兴趣. X ...

  2. line和spline_探索适用于Apache Spark的Spline Data Tracker和可视化工具(第1部分)

    line和spline 最近引起我注意的一个有趣且很有希望的开源项目是Spline ,它是由Absa维护的Apache Spark数据沿袭跟踪和可视化工具. 该项目由两部分组成:一个在驱动程序上工作的 ...

  3. mongodb json_在MongoDB和Spring Batch中将XML转换为JSON和原始使用

    mongodb json 总览 为什么将XML转换为JSON以在MongoDB中原始使用? 由于MongoDB使用JSON文档存储记录,就像表和行将记录存储在关系数据库中一样,我们自然需要将XML转换 ...

  4. 探索适用于Apache Spark的Spline Data Tracker和可视化工具(第1部分)

    最近引起我注意的一个有趣且充满希望的开源项目是Spline ,它是由Absa维护的Apache Spark的数据沿袭跟踪和可视化工具. 该项目由两部分组成:一个在驱动程序上工作的Scala库,该驱动程 ...

  5. 在MongoDB和Spring Batch中将XML转换为JSON和原始使用

    总览 为什么将XML转换为JSON以在MongoDB中原始使用? 由于MongoDB使用JSON文档存储记录,就像表和行将记录存储在关系数据库中一样,我们自然需要将XML转换为JSON. 某些应用程序 ...

  6. Apache Spark源码阅读环境搭建

    文章目录 1 下载源码 2 导入项目 3 新建文件 4 Debug JavaWordCount 4.1 搜索JavaWordCount 4.2 修改参数 4.3 Debug 遇到的报错 1 未设置Ma ...

  7. Apache Spark 3.0 SQL DataFrame和DataSet指南

    目录 简介 SQL 数据集和数据框 入门 起点:SparkSession Scala语言 Java语言 Python语言 R语言 创建DataFrame Scala语言 Java语言 Python语言 ...

  8. 拥抱开源,我们是认真的-网易易数2020年Apache Spark贡献总结

    开源软件正在吞噬世界,在未来,没有一家企业能够脱离它们,也不可能存在一家企业能够脱离开源的开发协作方式,也没有一家企业会拒绝这种本质上是双赢的局面.本文来自网易数帆旗下网易易数研发团队,记录其2020 ...

  9. .NET Apache Spark做基于商品推荐系统如此简单

    一..NET Apache Spark大数据基础学习 分析数据基础 数据准备: 1,https://api.github.com/repos/tosch/ruote-kit,1,ruote-kit,R ...

最新文章

  1. Go 学习笔记(49)— Go 标准库之 io/ioutil(读写文件、获取目录下的文件和子目录、创建临时目录和文件)
  2. 程序员总结:帮助你早些明白一些道理
  3. 分布式思想和rpc解决方案介绍
  4. iOS之性能优化·列表异步绘制
  5. flex Module之间的通信
  6. cacheable 表达式_Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
  7. 【问题解决方案】谷歌浏览器如何打开“开发者工具”窗口
  8. Node连接MySQL并封装其增删查改
  9. Atitit 切入一个领域的方法总结 attilax这里,机器学习为例子
  10. Eclipse+Maven+Spring+CXF 构建webservice 服务
  11. 小程序开发中遇到的坑
  12. ipad iphone 开发的应用,加一个启动预览图片
  13. 天津城市职业学院计算机国考没过,天津市2019年下半年全国计算机等级考试都有哪些考点可以报名?...
  14. PHP下载远程图片的几种方法总结
  15. Ruby中yield和block的用法
  16. 北汽极狐ARCFOX与华为合作
  17. 如何理解CE中指针,多重指针,偏移的概念
  18. linux系统CPU隔离isolcpu参数设置
  19. 中国工业级过氧化氢市场深度研究分析报告
  20. Mesos+Marathon搭建部署

热门文章

  1. Java压缩技术(七) TAR——Commons实现
  2. 手把手教会你(单/多)文件上传(并修改文件默认的最大最小值)
  3. MyBatis(延迟加载 缓存)
  4. java常用代码_Java 中常用代码 (欢迎补充)
  5. python中ls是什么_使用Python代码实现Linux中的ls遍历目录命令的实例代码
  6. 9.2-控制单元CU的功能(学习笔记)
  7. 如何评估模型的预测性能?
  8. MySQL优化(一):表结构优化
  9. 需求调研 现有系统梳理_对速度的需求,访问现有数据的速度提高了1000倍
  10. mockito入门_Mockito入门