我在HDFS中有多个zip文件,包含两种类型的文件(A.csv
& B.csv
)
HDFS位置
/data/jan.zip --> contains A.csv & B.csv
/data/feb.zip --> contains A.csv & B.csv
我想将文件解压缩到HDFS位置,如下所示
/data/jan/A.csv
/data/jan/B.csv
/data/feb/A.csv
/data/feb/B.csv
我正在寻找任何技术(火花,猪,蜂巢,......)下面的一些命令
hadoop fs -unzip hdfs://..../abc.zip
答案 0 :(得分:1)
Editor
。
在您的情况下,您需要循环遍历hdfs中的数据文件夹以及您需要在下面执行的每个zip文件,如命令例如:
的 var scrollViewHeader = new ScrollView
{
HeightRequest = 200,
Content = label
};
强>
FileUtils
,其中包含以下方法。
我在Hadoop API中搜索,我得到了这个我没有尝试过这个,但根据文档,它可能会工作。
答案 1 :(得分:1)
我是通过Python 3在远程hdfs中从本地PC上实现的。如果有帮助的话,那就太好了! 您可以将以下脚本调整为适合您的pyspark。
您需要以下库:
from zipfile import ZipFile
from io import BytesIO
from hdfs import Client, HdfsError
前两个是本地的,应该安装“ hdfs”。 我使用了https://pypi.org/project/hdfs/。您可以使用其他任何您喜欢的东西。
所以,这是脚本:
hdfs_client = Client('s%:s%') % (YOUR_HDFS_HOST, YOUR_HDFS_PORT)
main_dir_path = '/data'
for fls in hdfs_client.list(main_dir_path):
file_path = '%s/%s' % (main_dir_path, fls)
if fls.find('.zip') != -1:
file_name, file_suffix = fls.split('.')
fold_new_name = '%s/%s' % (main_dir_path, file_name)
try:
hdfs_client.makedirs(fold_new_name)
print(fold_new_name)
except HdfsError as h_err:
print(h_err)
with hdfs_client.read(file_path) as reader:
zip_content = reader.read()
zip_file = ZipFile(BytesIO(zip_content))
for z_fls in zip_file.namelist():
single_file_content = zip_file.read(z_fls)
zip_file_new_path = '%s/%s' % (fold_new_name, z_fls)
hdfs_client.write(zip_file_new_path, single_file_content)
print('%s file extracted' % zip_file_new_path)
我知道这是一个不错的转储解决方案,但是它可以工作。 希望它对某人有帮助。