代码之家  ›  专栏  ›  技术社区  ›  Data_101

使用Pyspark的XML到Dataframe

  •  1
  • Data_101  · 技术社区  · 6 年前

    我正在尝试废弃一个XML文件,并从XML文件上的标记创建一个数据帧。我用pyspark开发数据块。

    XML文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <note>
      <shorttitle>shorttitle_1</shorttitle>
      <shorttitle>shorttitle_2</shorttitle>
      <shorttitle>shorttitle_3</shorttitle>
      <shorttitle>shorttitle_4</shorttitle>
    </note>
    

    我的代码似乎要从页面中删除XML并从标记创建一个列表,但是当我创建数据帧并尝试输入所述列表时,我只看到一个dataframe包含空值。

    代码:

    from pyspark.sql.types import *
    from pyspark.sql.functions import *
    import requests
    from bs4 import BeautifulSoup
    
    
    res = requests.get("http://files.fakeaddress.com/files01.xml")
    soup = BeautifulSoup(res.content,'html.parser')
    short_title = soup.find_all('shorttitle')[0:2]
    
    field = [StructField("Short_Title",StringType(), True)]
    
    schema = StructType(field)
    
    df = spark.createDataFrame(short_title, schema)
    

    输出:

    +-----------+
    |Short_Title|
    +-----------+
    |       null|
    |       null|
    +-----------+
    

    想要的输出:

    +-------------+
    |Short_Title  |
    +-------------+
    |shorttitle_1 |
    |shorttitle_2 |
    +-------------+
    
    0 回复  |  直到 6 年前
        1
  •  0
  •   bramb    4 年前

    你可以使用 Spark-XML 包,它直接从您的XML文件创建一个Spark数据帧,无需任何进一步的麻烦。只有在XML文件中有嵌套键时,它才会变得更加复杂。

        2
  •  0
  •   Ajay Kharade    4 年前

    您可以使用Databricks-API使用apachespark-XML处理来实现这一点,下面是代码示例

    schema = new StructType()
          .add("Short_Title",StringType)
    
    df = spark.read
      .option("rowTag", "note")
      .schema(schema)
      .xml("files01.xml")
    
    df.show()