首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >化工厂重组数据与出口

化工厂重组数据与出口
EN

Stack Overflow用户
提问于 2022-07-16 15:59:11
回答 2查看 45关注 0票数 0

我尝试了这里显示的另一种方法:Restructuring pyspark dataframe,它不适用于我的数据帧。

我有一个数据文件,如下所示:

代码语言:javascript
复制
Attribute    Values   ID    Brand    Model
--------------------------------------------
Colour       Red      1     Sony     xyz
Energy       F        2     Samsung  abc
Year         2020     1     Sony     xyz
Energy       C        1     Sony     xyz
Colour       Blue     2     Samsung  abc

我需要调整/调整我的桌子,如下所示:

代码语言:javascript
复制
Brand    Model    Colour    Energy     Year
--------------------------------------------
Sony     xyz      Red        C         2020
Samsung  abc      Blue       F         2021
etc...

目前,我尝试使用此代码尝试按ID进行枢轴和分组,但它不允许我显示,我也不知道如何基于“属性”将‘value’作为值:

代码语言:javascript
复制
import pandas as pd
from pyspark.sql import SparkSession
from pyspark.sql.types import StructType,StructField, StringType, IntegerType,BooleanType,DoubleType
import pyspark

spark = SparkSession.builder \
    .master("local[1]") \
    .appName("PySpark Read JSON") \
    .getOrCreate()



df = spark.read.json("examplell.json")

df.printSchema()
df.show()


count = df.select('ID').distinct().count()

df_pivot = df.groupBy('ID').pivot('Attribute').agg('Values')
df_pivot.printSchema()
df_pivot.show()
EN

回答 2

Stack Overflow用户

发布于 2022-07-16 17:33:18

您不需要在ID进行分组,而是需要按照brandmodel进行分组。并且,在first()中使用类似于.agg()的聚合函数。

代码语言:javascript
复制
data_ls = [
    ('colour', 'red', 1, 'sony', 'xyz'),
    ('energy', 'f', 2, 'samsung', 'abc'),
    ('year', '2020', 1, 'sony', 'xyz'),
    ('energy', 'c', 1, 'sony', 'xyz'),
    ('colour', 'blue', 2, 'samsung', 'abc'),
    ('year', '2021', 2, 'samsung', 'abc')
]

data_sdf = spark.sparkContext.parallelize(data_ls). \
    toDF(['attribute', 'values', 'id', 'brand', 'model'])

# +---------+------+---+-------+-----+
# |attribute|values| id|  brand|model|
# +---------+------+---+-------+-----+
# |   colour|   red|  1|   sony|  xyz|
# |   energy|     f|  2|samsung|  abc|
# |     year|  2020|  1|   sony|  xyz|
# |   energy|     c|  1|   sony|  xyz|
# |   colour|  blue|  2|samsung|  abc|
# |     year|  2021|  2|samsung|  abc|
# +---------+------+---+-------+-----+

data_sdf. \
    groupBy(['brand', 'model']). \
    pivot('attribute'). \
    agg(func.first('values')). \
    show()

# +-------+-----+------+------+----+
# |  brand|model|colour|energy|year|
# +-------+-----+------+------+----+
# |   sony|  xyz|   red|     c|2020|
# |samsung|  abc|  blue|     f|2021|
# +-------+-----+------+------+----+
票数 0
EN

Stack Overflow用户

发布于 2022-07-22 07:47:23

groupBy()可能是不必要的,从您的数据示例中,不能聚合Values。因此,我建议如下:

代码语言:javascript
复制
df_pivot = df.pivot(index=[['Brand', 'Model']], columns='Attribute', values='Values')

如果由于“品牌”+“模型”没有创建唯一的索引或行而遇到重复值异常,则添加“ID”作为索引的一部分。我认为ID是唯一的,一旦旋转。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73005696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档