python - 如何将多个分区的 .gzip 文件读入 Spark Dataframe?
问题描述
我有以下分区数据文件夹-
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
读取文件内容时,它显示数据是制表符分隔的,并且是简单易读的英文。
如何将这些文件正确读入数据框?
解决方案
由于某种原因,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!")
推荐阅读
- linux - 如何从文件中grep一个单词并仅显示带有后缀的单词而不是整行?
- python - 用于将给定日期最多添加 999999999 天的 Python 库
- z3 - 在 Z3 中创建可变宽度蒙版约束
- r - 通过对现有级别进行分组来创建新级别
- javascript - 比较同一数组的元素的最快方法
- .htaccess - 在 3 或 4 个字符后重写
- angularjs - 我想使用全局变量在控制器文件中“保存”用户的会话
- sql - 通过加入 2 个表来获取个人的最新记录
- office-js - 如何使用 Office.js API 访问 OneDrive driveItem 的属性?
- c++ - .obj 中已定义的变量;这里发生了什么?