Python lê arquivos de sufixo snappy

(Autor: Chen Yujue)

É necessário ler um arquivo de log chamado por uma tabela hbase, que possui um sufixo snappy.
Método 1 (sem sucesso, interessados ​​podem tentar novamente)
snappy é um arquivo compactado, se quisermos ler o conteúdo, precisamos descompactá-lo primeiro.

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

Após a instalação, python3.6 entra em python, é melhor adicionar 'rb' ao ler arquivos, caso contrário, problemas de codificação podem ser relatados

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

Há uma falta de gcc durante a instalação, e o mesmo é verdade para baixar arquivos de instalação da fonte pip da intranet, pip3 download python-snappy, display

    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.


Link de referência:
https://www.alibabacloud.com/help/zh/doc-detail/108942.htm

Método 2 (bem-sucedido, mas não o melhor)
Portanto, encontre outro método, você pode carregar diretamente o arquivo compactado no Hive, lê-lo com Spark ou Python e, em seguida, analisá-lo.

Primeiro olhe para a estrutura do arquivo

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

Em seguida, crie uma tabela hive de acordo com a estrutura do arquivo:

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

Em seguida, carregue o arquivo no hive. Não consigo fazer isso no caminho mais curto e não consigo encontrar o arquivo, mas o spark-sql pode:

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

Em seguida, use faísca ou colmeia para lê-lo.
O método 3 (bem-sucedido, o melhor, analisado diretamente no dataframe)
também pode usar o Spark diretamente para ler arquivos rápidos:

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

Ele pode ser analisado diretamente em json e depois convertido em dataframe, o que é muito fácil de usar

Link de referência:
https://blog.csdn.net/weixin_33712987/article/details/91698289

おすすめ

転載: blog.csdn.net/weixin_39750084/article/details/109491268