Python HDFS 연결 파일 업로드 및 Pandas CSV 로 텍스트 파일 변환

5826 단어 PythonHDFSPandasCSV
1.목표
hadop hive 나 spark 등 데이터 계산 프레임 워 크 를 통 해 데이터 세척 을 마 친 데 이 터 는 HDFS 에 있 습 니 다.
파충류 와 기계 학습 은 Python 에서 쉽게 이 루어 집 니 다.
Linux 환경 에서 Python 을 만 드 는 것 은 pyCharm 이 편리 하지 않 습 니 다.
Python 과 HDFS 의 읽 기와 쓰기 채널 을 만들어 야 합 니 다.
2.실현
Python 모듈 pyhdfs 설치
파 이 썬 3.6,hadop 2.9
파일 읽 기 코드 는 다음 과 같 습 니 다.

from pyhdfs import HdfsClient
client=HdfsClient(hosts='ghym:50070')#hdfs  
res=client.open('/sy.txt')#hdfs    ,   /
for r in res:
 line=str(r,encoding='utf8')#open     ,str()         
 print(line)
파일 코드 는 다음 과 같 습 니 다.

from pyhdfs import HdfsClient
client=HdfsClient(hosts='ghym:50070',user_name='hadoop')#  hadoop       
str='hello world'
client.create('/py.txt',str)#           
HDFS 에 로 컬 파일 업로드

from pyhdfs import HdfsClient
client = HdfsClient(hosts='ghym:50070', user_name='hadoop')
client.copy_from_local('d:/pydemo.txt', '/pydemo')#        ,HDFS       
3.텍스트 파일 읽 기 csv 쓰기
Python 설치 pandas 모듈
텍스트 파일 의 구분자 확인

# pyhdfs      ,      ,
from pyhdfs import HdfsClient
client = HdfsClient(hosts='ghym:50070', user_name='hadoop')
inputfile=client.open('/int.txt')
# pandas      read_table
import pandas as pd
df=pd.read_table(inputfile,encoding='gbk',sep=',')#      ,  ,   
#    to_csv     csv
df.to_csv('demo.csv',encoding='gbk',index=None)#       ,  ,     

보충 지식:hdfs 를 읽 고 pandas 를 거 쳐 csv 로 전환 하 는 구덩이
작업 절 차 는 다음 과 같다.
hdfs 의 csv 파일 을 읽 습 니 다.hdfs 클 라 이언 트 가 제공 하 는 read 방법 을 사용 합 니 다.이 방법 은 생 성 기 를 되 돌려 줍 니 다.
읽 은 데 이 터 를 쉼표 로 처리 하여 2 차원 배열 로 바 꿉 니 다.
2 차원 배열 을 pandas 에 전송 하여 df 를 생 성 합 니 다.
약간의 처 리 를 거 친 후 df 를 csv 파일 로 바 꾸 고 hdfs 에 기록 합 니 다.
문 제 는 이렇다.
정상 데이터:
ZERO,MEAN,STD,CV,INC,OPP,CS,IS_OUTNET
0,9.233,2.445,0.265,1.202,241,1,0
0,8.667,1.882,0.217,1.049,179,1,0
세 줄 의 데 이 터 는 정상적으로 절 차 를 밟 아 아무런 문제 가 없다.
이상 데이터:
ZERO,MEAN,STD,CV,INC,OPP,CS,IS_OUTNET,probability,prediction
0,9.233,2.445,0.265,1.202,241,1,0,'[0.9653901649086855,0.03460983509131456]',0.0
0,8.667,1.882,0.217,1.049,179,1,0,'[0.9653901649086855,0.03460983509131456]',0.0
줄 마다 하나의 배열 과 유사 한 데이터 가 있 고 따옴표 가 싸 여 있 으 며 중간 에 쉼표 가 존재 하 므 로 분리 할 수 없습니다.
이 를 위해,나의 방법 은 다음 과 같다.
일치 하 는 쉼표 는 따옴표 로 둘러싸 인 문자열 입 니 다.
일치 하 는 문자열 의 쉼표 를 특정 문자 로 바 꿉 니 다.
바 뀐 새 문자열 을 원래 문자열 로 바 꿉 니 다.
원래 문자열 의 특정 문자열 을 쉼표 로 바 꿉 니 다.
원래 이렇게 하 는 것 은 아무런 문제 가 없 지만,pandas 를 거 쳐 csv 로 바 뀌 었 을 때,원래 따옴표 가 있 던 문자열 이 앞 뒤로 세 개의 따옴표 가 있 는 것 을 발견 하 였 다.
원본 데이터:

처리 한 데이터:

방법 은 다음 과 같다.

데 이 터 를 자세히 연구 한 결과 데이터 에 있 는 따옴표 가 순수한 텍스트 파일 에서 문자열 로 표 시 될 뿐 실제 데이터 에 존재 하지 말 아야 한 다 는 것 을 발견 했다.

그리고 나 는 매 칭 할 때마다 그대로 바 뀌 었 다.예 를 들 어:
원본 데이터:
"[0.9653901649086855,0.03460983509131456]"
일치 교체 후:
"[0.9653901649086855${dot}0.03460983509131456]"
이렇게 pandas 에 전달 하면 이 데 이 터 는 따옴표 가 있 는 것 이 라 고 생각 하고 csv 로 다시 전환 할 때 전의 등 조작 을 하여 많은 따옴표 가 생 긴 다.
따라서 해결 방법 은 교체 하기 전에 일치 하 는 따옴표 도 제거 하 는 것 입 니 다.
PATTERN = '(?<=(?P[\'\"]))([^,]+,[^,]+)+?(?=(?P=quote))'
중간([^,]+,[^,]+)+?+?이런 조합 이 있 는 지 확인 해 야 하고 탐욕 모델 이 아니 기 때문에 안 된다?아니면

(ps:앞 에 있 는 매 칭 을 편리 하 게 참조 하기 위해 서,나 는 둘 러 보기 매 칭 에서 그룹 을 만 들 었 습 니 다)
전체 효과 추가:

효 과 를 설명 하기 위해 pandas 의 자체 테이프 읽 기 csv 방법 을 참조 합 니 다:

pandas 가 읽 고 꺼 낸 이 위치 데이터 도 문자열 입 니 다.따옴표 는 문자열 성명 으로 존재 합 니 다.
다시 정규 수정:

def split_by_dot_escape_quote(string):
  """
          ,      ,         
  """
  #         ,   ,        ,
  #     (     )    ,   quote,
  #        ,    +?,   ,           ,
  #  *?,   0   ,         (            ),
  #                    quote,      ",
  # +?             , "",            
  pattern = re.compile('(?=(?P<quote>[\'\"])).+?(?P=quote)')
  rs = re.finditer(pattern, string)
  for data in rs:
    #        
    old_str = data.group()
    #                    ,
    #              
    new_str = old_str.replace(',', '${dot}')
    #                ,        ,
    #               ,            
    new_str = re.sub(data.group('quote'), '', new_str)
    string = string.replace(old_str, new_str)
  sps = string.split(',')
  return map(lambda x: x.replace('${dot}', ','), sps)
 
 
s = '"2011,603","3510006998","F","5","5","0",""'
print(list(split_by_dot_escape_quote(s)))
실행 결 과 는 다음 과 같 습 니 다.

이전에 생각 한 정칙 은 좀 복잡 하 였 으 나,오히려 본의 에서 벗 어 났 으 며,여전히 정칙 에 대한 인식 이 깊 지 않다.
이 파 이 썬 은 HDFS 에 연결 하여 파일 업로드 및 다운로드 및 Pandas 에서 텍스트 파일 을 CSV 로 변환 하 는 작업 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 하 시기 바 랍 니 다.많은 응원 부탁드립니다.

좋은 웹페이지 즐겨찾기