我今天面临的挑战是: 拥有 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
有人可以帮忙解决这个问题吗?
问候
在这种情况下只需使用元组或元组列表,第一个元素是完整路径(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"])