【问题标题】:Spark Dataframe with CLIXML使用 CLIXML 的 Spark 数据框
【发布时间】:2022-01-18 10:53:28
【问题描述】:
  1. 我正在使用 databricks 读取 API 从 ADLSGEN2 读取 csv 文件。

  2. csv 文件仅包含一列,其中包含 Power Shell(clixml) 内容。

  3. 在尝试使用 spark-xml 函数提取时,我没有得到 正确的架构和记录已损坏。

  4. 所以请帮我将clixml转换为xml或exact 提取xml内容的解决方案。

代码块:

import com.databricks.spark.xml._
import com.databricks.spark.xml.from_xml_string
import com.databricks.spark.xml.functions.from_xml
import org.apache.spark.sql.functions.{col}
import org.apache.spark.sql.types.{StructType}
import spark.implicits._

var path = "csvpath"
val df= spark.read
.option("header","false")
.option("inferschema","true")
.csv(path)
val dfrename= df.withColumnRenamed("_c0","xmldata")
val xmlSchema = schema_of_xml(dfrename.select("xmldata").as[String])
val xmlDF = dfrename.withColumn("xmldata", from_xml(col("xmldata"), xmlSchema))
display(xmlDF )

XML 内容:示例

<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
  <Obj RefId="0">
    <DT>2018-03-21T08:05:39.5085956-04:00</DT>
    <MS>
      <Obj N="DisplayHint" RefId="1">
        <TN RefId="0">
          <T>Microsoft.PowerShell.Commands.DisplayHintType</T>
          <T>System.Enum</T>
          <T>System.ValueType</T>
          <T>System.Object</T>
        </TN>
        <ToString>DateTime</ToString>
        <I32>2</I32>
      </Obj>
    </MS>
  </Obj>
</Objs>

【问题讨论】:

    标签: xml scala apache-spark


    【解决方案1】:

    在 Spark 中读取 XML

    在解析 xml 之前,您不需要使用 csv 格式读取数据。可以使用xml 格式读取输入,并为rowTag 选项提供适当的值。查看您提供的数据,Obj 似乎是要为其创建行的相关标签。

    Spark Shell 中的使用示例

    使用包com.databricks:spark-xml_2.12:0.14.0 loaded 的Spark 3.1.2。

    scala> val xmlDataFrame = spark.read.option("rowTag", "Obj").format("xml").load(path)                                                                                                                      
    xmlDataFrame: org.apache.spark.sql.DataFrame = [DT: timestamp, MS: struct<Obj: struct<I32: bigint, TN: struct<T: array<string>, _RefId: bigint> ... 3 more fields>> ... 1 more field]                      
                                                                                                                                                                                                               
    scala> xmlDataFrame.printSchema                                                                                                                                                                            
    root                                                                                                                                                                                                       
     |-- DT: timestamp (nullable = true)                                                                                                                                                                       
     |-- MS: struct (nullable = true)                                                                                                                                                                          
     |    |-- Obj: struct (nullable = true)                                                                                                                                                                    
     |    |    |-- I32: long (nullable = true)                                                                                                                                                                 
     |    |    |-- TN: struct (nullable = true)                                                                                                                                                                
     |    |    |    |-- T: array (nullable = true)                                                                                                                                                             
     |    |    |    |    |-- element: string (containsNull = true)                                                                                                                                             
     |    |    |    |-- _RefId: long (nullable = true)                                                                                                                                                         
     |    |    |-- ToString: string (nullable = true)                                                                                                                                                          
     |    |    |-- _N: string (nullable = true)                                                                                                                                                                
     |    |    |-- _RefId: long (nullable = true)                                                                                                                                                              
     |-- _RefId: long (nullable = true)                                                                                                                                                                        
                                                                                                                                                                                                               
                                                                                                                                                                                                               
    scala> xmlDataFrame.show(false)                                                                                                                                                                            
    +--------------------------+-----------------------------------------------------------------------------------------------------------------------------------+------+                                    
    |DT                        |MS                                                                                                                                 |_RefId|                                    
    +--------------------------+-----------------------------------------------------------------------------------------------------------------------------------+------+                                    
    |2018-03-21 12:05:39.508595|{{2, {[Microsoft.PowerShell.Commands.DisplayHintType, System.Enum, System.ValueType, System.Object], 0}, DateTime, DisplayHint, 1}}|0     |                                    
    +--------------------------+-----------------------------------------------------------------------------------------------------------------------------------+------+  
    
                                  
                                                                                                                                                                                                           
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 2021-11-11
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      • 1970-01-01
      相关资源
      最近更新 更多