【问题标题】:How to read multiple partitioned .gzip files into a Spark Dataframe?如何将多个分区的 .gzip 文件读入 Spark Dataframe?
【发布时间】:2020-02-02 06:25:04
【问题描述】:

我有以下分区数据文件夹-

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 包。
  • 您好在记事本/文本编辑器中打开示例文件,您将了解文件的种类。如果其 XML 参见以下链接并检查 python API github.com/databricks/spark-xml
  • @Sri_Karthik 我打开了文件,看起来它是一个制表符分隔的文件,而不是 XML 格式..
  • 如果它不是 xml 文件,那么它应该按照您的代码 my_df = spark.read.csv("/path/to/my_folder/", sep= '\t') 读取数据。我不明白为什么它以不同的格式显示。编码可能有问题。因此,请检查数据的编码。默认情况下它将是 utf-8。你能展示一张图片或任何随机的 5 行数据作为样本吗?
  • 为什么不改用 .csv(..., compression='gzip') 呢?支持

标签: python python-3.x dataframe pyspark apache-spark-sql


【解决方案1】:

由于某种原因,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')?支持
猜你喜欢
  • 2022-01-13
  • 1970-01-01
  • 2015-02-13
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 2020-11-09
相关资源
最近更新 更多