【问题标题】:how to extract xml data within csv entry如何在csv条目中提取xml数据
【发布时间】:2021-10-12 11:52:18
【问题描述】:

我需要将数据加载到包含一些 XML 和文本内容的 spark 数据框中。以下是我的数据格式。

1,2003,4349,<c><ab a="Roy" b="201"/><ab a="Joe" b="202"/></c>,54,M

我需要得到如下的最终输出。

+--------+--------------+--------------------+-------------+--------------+--------------+-------------+-------+---------+
|   Month|Year          | pincode            |        name |      id      |  manager_name|manager_id   |dep_id |Gender   |
+--------+--------------+--------------------+-------------+--------------+--------------+-------------+--------+--------+
|1       |2003          |4348                |      Roy    |   201        |Joe           | 202         |    54 |M        |
+--------+--------------+--------------------+-------------+--------------+--------------+-------------+-------+---------+

【问题讨论】:

  • 你试过使用 spark-xml 库了吗?
  • 我尝试使用 spark-xml,因为它是嵌套的 XML,我不知道如何获取输出
  • 嗯,您最初需要使用常规的 csv 阅读器,但是您可以分享您尝试过的代码吗?

标签: xml scala csv apache-spark


【解决方案1】:

我们可以使用spark-xml library得到想要的结果。

  import com.databricks.spark.xml._
  import com.databricks.spark.xml.functions.from_xml

  val spark = SparkSession.builder().master("local[*]").getOrCreate()
  import spark.implicits._
  spark.sparkContext.setLogLevel("ERROR")

  val df = // Read csv file
  
  // Assuming your xml content column name is xmldata
  val xmlSchema = schema_of_xml(df.select("xmldata").as[String])

  df.withColumn("xmldata", from_xml('xmldata, xmlSchema))
    .select("*", "xmldata.ab")
    .selectExpr(df.columns.diff(Array("xmldata")) ++
      Array("ab[0]._a as name", "ab[0]._b as id", "ab[1]._a as manager_name", "ab[1]._b as manager_id"): _*)
    .show(false)
/*
+-----+----+-------+------+------+----+---+------------+----------+
|Month|Year|pincode|dep_id|Gender|name|id |manager_name|manager_id|
+-----+----+-------+------+------+----+---+------------+----------+
|1    |2003|4349   |54    |M     |Roy |201|Joe         |202       |
+-----+----+-------+------+------+----+---+------------+----------+ /*

【讨论】:

    猜你喜欢
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 2015-08-27
    • 2011-02-17
    相关资源
    最近更新 更多