Python读取snappy后缀文件

(作者:陈玓玏)

需要读取个hbase表调用的日志文件,是snappy后缀的。
方法一(未成功,有兴趣的可以再尝试)
snappy是压缩文件,如果要读取其中内容,我们需要先进行解压操作。

#不是这个包
pip3.6 install snappy --user
#是这个包
pip3.6 install python-snappy --user

安装好之后,python3.6进入python,读文件的时候最好加上’rb‘,否则可能报编码问题

import snappy
compressed = open('logs.snappy','rb').read()
uncompress = snappy.uncompress(compressed)

安装时缺乏gcc,通过内网pip源下载安装文件安装也是一样,pip3 download python-snappy,显示

    gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/python2.7 -c snappy/snappymodule.cc -o build/temp.linux-x86_64-2.7/snappy/snappymodule.o
    snappy/snappymodule.cc:31:22: fatal error: snappy-c.h: No such file or directory
     #include <snappy-c.h>
                          ^
    compilation terminated.
    error: command 'gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/bin/python2 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-WqNQuM/python-snappy/setup.py'"'"'; __file__='"'"'/tmp/pip-install-WqNQuM/python-snappy/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-JHcPdP/install-record.txt --single-version-externally-managed --user --prefix= --compile --install-headers /home/chendl/.local/include/python2.7/python-snappy Check the logs for full command output.


参考链接:
https://www.alibabacloud.com/help/zh/doc-detail/108942.htm

方法二(成功,但不是最好用的)
于是,找到另一个方法,可以直接把压缩文件加载进hive,然后再用spark或python读取,之后再解析就可以了。

先看看文件结构

hdfs dfs -text /user/log/logs/2020110406/logs.snappy | head -10

然后根据文件结构建一个hive表:

create table tmp.cdl_snappy_test 
(content string)
stored as inputformat 'org.apache.hadoop.mapred.TextInputFormat' 
outputformat 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';

然后再将文件加载进hive,我的beeline里不能这样操作,总是找不到文件,但spark-sql可以:

load data local inpath 'logs.snappy' into table tmp.cdl_snappy_test;

然后再用spark或hive读取即可。
方法三(成功,最好用的,直接解析成dataframe)
也可以直接用spark读取snappy文件:

df = spark.read.format('json').load('/user/log/logs/2020110406/logs.snappy')

可以直接解析成json,再转化成dataframe,蛮好用

参考链接:
https://blog.csdn.net/weixin_33712987/article/details/91698289

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要解压.snappy.parquet文件,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了python-snappy和pyarrow这两个库。你可以使用以下命令进行安装:\[1\] ``` pip install python-snappy pip install pyarrow ``` 2. 下载源码并编译打包,找到模块文件的target/datax/plugin/reader/hdfsreader.zip文件。将该文件解压到datax安装目录的${DATAX_HOME}/plugin/reader/下。请注意提前备份原有的hdfsreader插件,以防出现问题时可以回滚。\[2\] 3. 配置datax job,确保你的datax job中已经正确配置了相关的参数和路径。 4. 在代码中使用相应的库来解压.snappy.parquet文件。你可以使用python-snappy库来解压snappy压缩的数据,然后使用pyarrow库来读取和处理parquet文件。具体的代码开发步骤可以参考相关的文档和资料。\[3\] 总结起来,要解压.snappy.parquet文件,你需要安装python-snappy和pyarrow库,然后根据具体的需求进行代码开发和配置。希望这些信息对你有帮助! #### 引用[.reference_title] - *1* [成功解决RuntimeError: Decompression ‘SNAPPY‘ not available. Options: [‘GZIP‘, ‘UNCOMPRESSED‘]](https://blog.csdn.net/qq_41185868/article/details/109662915)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Datax插件二次开发之HdfsReader支持parquet](https://blog.csdn.net/qq_34599449/article/details/122735299)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值