如何将多个分区的.gzip文件读取到Spark Dataframe中?

3
我有以下分区数据的文件夹 -
my_folder
 |--part-0000.gzip
 |--part-0001.gzip
 |--part-0002.gzip
 |--part-0003.gzip

我尝试使用以下方式将这些数据读取到数据框中-

>>> my_df = spark.read.csv("/path/to/my_folder/*")
>>> my_df.show(5)
+--------------------+
|                 _c0|
+--------------------+
|��[I���...|
|��RUu�[*Ք��g��T...|
|�t���  �qd��8~��...|
|�(���b4�:������I�...|
|���!y�)�PC��ќ\�...|
+--------------------+
only showing top 5 rows

我也尝试使用这个来检查数据 -

>>> rdd = sc.textFile("/path/to/my_folder/*")
>>> rdd.take(4)
['\x1f�\x08\x00\x00\x00\x00\x00\x00\x00�͎\\ǖ�7�~�\x04�\x16��\'��"b�\x04�AR_<G��"u��\x06��L�*�7�J�N�\'�qa��\x07\x1ey��\x0b\\�\x13\x0f\x0c\x03\x1e�Q��ڏ�\x15Y_Yde��Y$��Q�JY;s�\x1d����[��\x15k}[B\x01��ˀ�PT��\x12\x07-�\x17\x12�\x0c#\t���T۱\x01yf��\x14�S\x0bc)��\x1ex���axAO˓_\'��`+HM҈�\x12�\x17�@']

注意: 当我执行 zcat part-0000.gzip | head -1 命令来读取文件内容时,它显示数据是以制表符分隔的,并且以普通易读的英语形式呈现。

我应该如何正确地将这些文件读入数据框架中?


你的gzip文件是xml格式吗?如果是,你应该使用xml包。 - Karthik
打开示例文件,使用记事本/文本编辑器,您将了解文件类型。如果它是XML,请参阅以下链接并检查Python API https://github.com/databricks/spark-xml - Karthik
@Sri_Karthik 我打开了这个文件,看起来它是一个制表符分隔的文件,而不是XML格式。 - kev
如果不是XML文件,则应根据您的代码读取数据my_df = spark.read.csv("/path/to/my_folder/", sep='\t')。我不明白为什么它显示为不同的格式。可能是编码有问题。因此,请检查数据的编码。默认情况下,它将是UTF-8。您能展示一张图片或任意5行数据作为样本吗? - Karthik
为什么不使用 .csv(..., compression='gzip') 呢?这是被支持的。 - Topde
1个回答

2
由于某些原因,Spark无法识别.gzip文件扩展名。因此,在读取分区数据之前,我必须更改文件扩展名-
import os

# go to my_folder
os.chdir("/path/to/my_folder")

# renaming all `.gzip` extensions to `.gz` within my_folder
cmd = 'rename "s/gzip/gz/" *.gzip'
result_code = os.system(cmd)

if result_code == 0:
    print("Successfully renamed the file extensions!")

    # finally reading the data into a dataframe
    my_df = spark.read.csv("/path/to/my_folder/*", sep="\t")
else:
    print("Could not rename the file extensions!")

为什么不使用.csv(..., compression='gzip')呢?它是被支持的。 - Topde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接