【问题标题】:Data Transposing with pyspark and aws glue使用 pyspark 和 aws 胶水进行数据转置
【发布时间】:2020-06-12 13:12:50
【问题描述】:

我是 pyspark 的新手,我在数据转置方面面临一些挑战。我正在使用 aws 胶水来运行这项工作。当前数据如下所示:

+-----------------+-----+------+-----+
|  Country        |Code |1969  |1979 |
+-----------------+------------------+
|  United States  | USA | 1234 | 4569|
--------------------------------------

我需要将数据转置为:

+-----------------+-----+-------+----------+
|Country          |Code | Year | Population| 
+-----------------+-------------------------
|United States.   |USA  | 1969 | 1234.     |
--------------------------------------------
|United States.   |USA  | 1970 | 4569.     |
--------------------------------------------

我曾尝试使用胶水映射功能,但这比那个要复杂得多。任何帮助将不胜感激。

【问题讨论】:

    标签: apache-spark pyspark transpose aws-glue amazon-athena


    【解决方案1】:

    我认为你需要的是一个 Pyspark,相当于一个 pandas melt:

    from typing import Iterable
    
    from pyspark.sql import functions as F
    from pyspark.sql import DataFrame
    
    def melt(
            df: DataFrame, 
            id_vars: Iterable[str], value_vars: Iterable[str], 
            var_name: str="variable", value_name: str="value") -> DataFrame:
        """Convert :class:`DataFrame` from wide to long format."""
    
        # Create array<struct<variable: str, value: ...>>
        _vars_and_vals = array(*(
            struct(lit(c).alias(var_name), col(c).alias(value_name)) 
            for c in value_vars))
    
        # Add to the DataFrame and explode
        _tmp = df.withColumn("_vars_and_vals", explode(_vars_and_vals))
    
        cols = id_vars + [
                col("_vars_and_vals")[x].alias(x) for x in [var_name, value_name]]
        return _tmp.select(*cols)
    
    

    然后

    melt(df, id_vars=['Country', 'Code'], value_vars=['1969', '1979']
        var_name=['Year'], value_name=['Population'] ).show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-28
      • 2020-05-03
      • 2019-01-04
      • 2018-09-26
      • 2020-02-18
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多