如何将列表转换为多列和数据框?

问题描述 投票:0回答:1

我今天面临的挑战是: 拥有 s3 路径列表,在列表内,将其拆分并获取一个数据框,其中一列包含路径,另一列仅包含文件夹名称。

我的列表有以下内容:

raw/ingest_date=20240918/eventos/
raw/ingest_date=20240918/llamadas/
raw/ingest_date=20240918/campanhas/
raw/ingest_date=20240918/miembros/
raw/ingest_date=20240918/objetivos/

我尝试这个代码:

new_dict = []
for folder in subfolders:
    new_dict.append(folder)
    name = folder.split("/", -1)
    new_dict.append(name[2])
    #print(name)

print(type(new_dict))
for elem in new_dict:
    print(elem) 

df = spark.createDataFrame(new_dict, ["s3_prefix", "table_name"])
df.show()

但结果是这样的列表:

raw/ingest_date=20240918/eventos/
eventos
raw/ingest_date=20240918/llamadas/
llamadas
raw/ingest_date=20240918/campanhas/
campanhas
...
...

但是当我尝试打印我的数据框时,我看到了这个:

类型错误:无法推断类型的架构:

这个想法是有一个像这样的数据框:

s3_prefix                            | table_name
------------------------------------------------------
raw/ingest_date=20240918/eventos/    | eventos
raw/ingest_date=20240918/llamadas/   | llamadas
raw/ingest_date=20240918/campanhas/  | campanhas
raw/ingest_date=20240918/miembros/   | miembros

有人可以帮忙解决这个问题吗?

问候

python dataframe apache-spark pyspark aws-glue
1个回答
0
投票

在这种情况下只需使用元组或元组列表,第一个元素是完整路径(s3_prefix),第二个元素是您的情况下的最后一个文件夹名称是表名称。

data_T 是元组列表(s3_prefix,table_name)

data_T =[(folder, folder.split('/')[-2]) for folder in subfolders]

然后

df = spark.createDataFrame(data_T , ["s3_prefix", "table_name"])
© www.soinside.com 2019 - 2024. All rights reserved.