我有1000个文件,其中包含以下格式的数据:
a|b|c|clm4=1|clm5=3
a|b|c|clm4=9|clm6=60|clm7=23
我想阅读它并将其转换为数据帧,如下所示:
clm1|clm2|clm3|clm4|clm5|clm6|clm7
a|b|c|1|3|null|null
a|b|c|9|null|60|23
我尝试过以下方法:
files = [f for f in glob.glob(pathToFile + "/**/*.txt.gz", recursive=True)]
df = spark.read.load(files, format='csv', sep = '|', header=None)
但它给了我以下结果:
clm1, clm2, clm3, clm4, clm5
a, b, c, 1, 3
a, b, c, 9, null
对于Spark 2.4+,您可以将文件作为单个列读取,然后按
|
将其拆分。您将得到一个可以使用higher-order functions进行转换的数组列:我们使用
transform
函数将从clm
列拆分得到的字符串数组转换为结构数组。 每个结构都包含列名(如果存在)(检查字符串是否包含=
)或将其命名为clm + (i+1)
,其中i
是其位置现在使用
map_from_entries
将数组转换为映射。最后,分解地图和轴以获得列给出:
相关问题 更多 >
编程相关推荐