apache spark_Apache Spark软件包,从XML到JSON
apache spark
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
總結
以上是生活随笔為你收集整理的apache spark_Apache Spark软件包,从XML到JSON的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 杨玉环安禄山是什么关系(杨玉环和安禄山之
- 下一篇: 电脑光驱打印光盘封面(电脑光驱打印光盘封
