py4j.protocol.Py4JJavaError: An error...(pyspark aws 3 읽기 데이터 설정)

4858 단어 spark 노트
버그 힌트
py4j.protocol.Py4JJavaError: An error occurred while calling o29.csv.
java.lang.IllegalAccessError: tried to access method org.apache.hadoop.metrics2.lib.MutableCounterLong
문제의 원인
pyspark 설치는 s3 서버의 내용을 읽을 때 각종 버그를 설정합니다.인터넷의 방법을 시험해 보았는데 마지막으로 정리해 보니 환경 변수가 불러온hadoop-aws와aws-java-sdk가 버전이 일치하지 않습니다.다중 테스트를 통해 이 두 가방의 버전이 사용 가능한 것을 잠시 발견했습니다:hadoop-aws:2.7.3 aws-java-sdk:1.7.4
데모 프로그램
이곳은 s3a 프로토콜을 통해서만 연결할 수 있으며, 이 프로그램은 국내와 외국의 s3를 연결할 수 있다.ID 및 키 교체 필요
import pyspark
import os

os.environ['PYSPARK_SUBMIT_ARGS'] = "--packages=org.apache.hadoop:hadoop-aws:2.7.3," \
                                    "com.amazonaws:aws-java-sdk:1.7.4 " \
                                    "pyspark-shell"
access_id = 'your_access_id'
access_key = 'your_access_key'

spark = pyspark.sql.SparkSession.builder.master('local').appName("hxy_test_script").getOrCreate()
sc = spark.sparkContext
hadoop_conf = sc._jsc.hadoopConfiguration()

hadoop_conf.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
hadoop_conf.set("fs.s3a.access.key", access_id)
hadoop_conf.set("fs.s3a.secret.key", access_key)
hadoop_conf.set("fs.s3a.endpoint", "s3.cn-north-1.amazonaws.com.cn")

sql = pyspark.SQLContext(sc)
path_list = ['s3a://bucket/DATA/00.csv']
df = sql.read.csv(path_list, header=True)
print(df.count())
print(df.show())

좋은 웹페이지 즐겨찾기