【问题标题】:Using PySpark to Create Tidy Dataframe from Arrays使用 PySpark 从数组创建整洁的数据框
【发布时间】:2020-08-01 18:55:52
【问题描述】:

我有一个 Spark 数据框,它有两个数组,如下所示:

df = spark.createDataFrame(
  [((["Person", "Company", "Person", "Person"], 
     ["John", "Company1", "Jenny", "Jessica"]))], 
  ["Type", "Value"])
df.show()

+--------------------+--------------------+
|                Type|               Value|
+--------------------+--------------------+
|[Person, Company,...|[John, Company1, ...|
+--------------------+--------------------+

我想把它改成如下所示的整洁版本:

df = spark.createDataFrame(
    [
        ("Person", "John"), 
        ("Company", "Company1"), 
        ("Person", "Jenny"), 
        ("Person", "Jessica"),
    ],
    ["Type", "Value"])
df.show()

+-------+--------+
|   Type|   Value|
+-------+--------+
| Person|    John|
|Company|Company1|
| Person|   Jenny|
| Person| Jessica|
+-------+--------+

感谢 PySpark 或 SparkSQL 解决方案。 TIA。

【问题讨论】:

    标签: arrays apache-spark pyspark apache-spark-sql


    【解决方案1】:

    来自 Spark-2.4.0 使用 arrays_zip 函数压缩两个数组(列表),然后执行 explode

    对于 Spark < 2.4,请使用 udf 创建 zip。

    Example:

    df = spark.createDataFrame(
      [((["Person", "Company", "Person", "Person"], 
         ["John", "Company1", "Jenny", "Jessica"]))], 
      ["Type", "Value"])
    
    from pyspark.sql.functions import *
    df.withColumn("az",explode(arrays_zip(col("Type"),col("Value")))).select("az.*").show()
    #+-------+--------+
    #|   Type|   Value|
    #+-------+--------+
    #| Person|    John|
    #|Company|Company1|
    #| Person|   Jenny|
    #| Person| Jessica|
    #+-------+--------+
    
    #using spark sql
    df.createOrReplaceTempView("tmp")
    sql("select col.* from (select explode(arrays_zip(Type,Value)) from tmp)q").show()
    #+-------+--------+
    #|   Type|   Value|
    #+-------+--------+
    #| Person|    John|
    #|Company|Company1|
    #| Person|   Jenny|
    #| Person| Jessica|
    #+-------+--------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多