Apache Spark软件包,从XML到JSON
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相关推荐
- apache spark_Apache Spark软件包,从XML到JSON
apache spark Apache Spark社区为扩展Spark付出了很多努力. 最近,我们希望将XML数据集转换为更易于查询的内容. 我们主要对每天进行的数十亿笔交易之上的数据探索感兴趣. X ...
- line和spline_探索适用于Apache Spark的Spline Data Tracker和可视化工具(第1部分)
line和spline 最近引起我注意的一个有趣且很有希望的开源项目是Spline ,它是由Absa维护的Apache Spark数据沿袭跟踪和可视化工具. 该项目由两部分组成:一个在驱动程序上工作的 ...
- mongodb json_在MongoDB和Spring Batch中将XML转换为JSON和原始使用
mongodb json 总览 为什么将XML转换为JSON以在MongoDB中原始使用? 由于MongoDB使用JSON文档存储记录,就像表和行将记录存储在关系数据库中一样,我们自然需要将XML转换 ...
- 探索适用于Apache Spark的Spline Data Tracker和可视化工具(第1部分)
最近引起我注意的一个有趣且充满希望的开源项目是Spline ,它是由Absa维护的Apache Spark的数据沿袭跟踪和可视化工具. 该项目由两部分组成:一个在驱动程序上工作的Scala库,该驱动程 ...
- 在MongoDB和Spring Batch中将XML转换为JSON和原始使用
总览 为什么将XML转换为JSON以在MongoDB中原始使用? 由于MongoDB使用JSON文档存储记录,就像表和行将记录存储在关系数据库中一样,我们自然需要将XML转换为JSON. 某些应用程序 ...
- Apache Spark源码阅读环境搭建
文章目录 1 下载源码 2 导入项目 3 新建文件 4 Debug JavaWordCount 4.1 搜索JavaWordCount 4.2 修改参数 4.3 Debug 遇到的报错 1 未设置Ma ...
- Apache Spark 3.0 SQL DataFrame和DataSet指南
目录 简介 SQL 数据集和数据框 入门 起点:SparkSession Scala语言 Java语言 Python语言 R语言 创建DataFrame Scala语言 Java语言 Python语言 ...
- 拥抱开源,我们是认真的-网易易数2020年Apache Spark贡献总结
开源软件正在吞噬世界,在未来,没有一家企业能够脱离它们,也不可能存在一家企业能够脱离开源的开发协作方式,也没有一家企业会拒绝这种本质上是双赢的局面.本文来自网易数帆旗下网易易数研发团队,记录其2020 ...
- .NET Apache Spark做基于商品推荐系统如此简单
一..NET Apache Spark大数据基础学习 分析数据基础 数据准备: 1,https://api.github.com/repos/tosch/ruote-kit,1,ruote-kit,R ...
最新文章
- Go 学习笔记(49)— Go 标准库之 io/ioutil(读写文件、获取目录下的文件和子目录、创建临时目录和文件)
- 程序员总结:帮助你早些明白一些道理
- 分布式思想和rpc解决方案介绍
- iOS之性能优化·列表异步绘制
- flex Module之间的通信
- cacheable 表达式_Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
- 【问题解决方案】谷歌浏览器如何打开“开发者工具”窗口
- Node连接MySQL并封装其增删查改
- Atitit 切入一个领域的方法总结 attilax这里,机器学习为例子
- Eclipse+Maven+Spring+CXF 构建webservice 服务
- 小程序开发中遇到的坑
- ipad iphone 开发的应用,加一个启动预览图片
- 天津城市职业学院计算机国考没过,天津市2019年下半年全国计算机等级考试都有哪些考点可以报名?...
- PHP下载远程图片的几种方法总结
- Ruby中yield和block的用法
- 北汽极狐ARCFOX与华为合作
- 如何理解CE中指针,多重指针,偏移的概念
- linux系统CPU隔离isolcpu参数设置
- 中国工业级过氧化氢市场深度研究分析报告
- Mesos+Marathon搭建部署
热门文章
- Java压缩技术(七) TAR——Commons实现
- 手把手教会你(单/多)文件上传(并修改文件默认的最大最小值)
- MyBatis(延迟加载 缓存)
- java常用代码_Java 中常用代码 (欢迎补充)
- python中ls是什么_使用Python代码实现Linux中的ls遍历目录命令的实例代码
- 9.2-控制单元CU的功能(学习笔记)
- 如何评估模型的预测性能?
- MySQL优化(一):表结构优化
- 需求调研 现有系统梳理_对速度的需求,访问现有数据的速度提高了1000倍
- mockito入门_Mockito入门