Apache spark Spark s3数据帧选择失败:ConnectionClosedException内容长度过早结束
我对Spark和整个生态系统都很陌生,因此我的错误对于发起人来说可能很愚蠢,但我没有发现任何支持或类似的问题被发布 我在一个S3存储桶上有很多数据(TBs),这些数据以子目录的形式被分割成数千个100Mb的拼花文件。目前,我只想查询单个文件并选择一些行。我正在本地运行spark(3.0),同时学习PySpark: 代码如下所示:Apache spark Spark s3数据帧选择失败:ConnectionClosedException内容长度过早结束,apache-spark,select,amazon-s3,pyspark,pyspark-sql,Apache Spark,Select,Amazon S3,Pyspark,Pyspark Sql,我对Spark和整个生态系统都很陌生,因此我的错误对于发起人来说可能很愚蠢,但我没有发现任何支持或类似的问题被发布 我在一个S3存储桶上有很多数据(TBs),这些数据以子目录的形式被分割成数千个100Mb的拼花文件。目前,我只想查询单个文件并选择一些行。我正在本地运行spark(3.0),同时学习PySpark: 代码如下所示: spark = SparkSession.builder \ .master("local") \ .appName("Test") \ .ge
spark = SparkSession.builder \
.master("local") \
.appName("Test") \
.getOrCreate()
path = "s3a://BUCKET_NAME/DIR/FILE.gz.parquet"
df = spark.read.parquet(path)
df.printSchema() # this works
df.show(n=10) # this works
df.orderBy("sessionID").show(n=5) # this works
df.select("sessionID").show(n=5) # this fails
OrderBy可以正确快速地显示按名称排序的前5个。但是,select查询失败,原因是:
19/09/13 01:16:28 ERROR TaskContextImpl: Error in TaskCompletionListener
org.apache.http.ConnectionClosedException: Premature end of Content-Length delimited message body (expected: 74915373; received: 45265606
at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:178)
因此,我相信select操作没有从S3存储桶接收到完整的数据,但是对此我能做些什么呢?为什么OrderBy起作用
下面的问题有点不确定。数据被组织成需要一次性处理的会话。但每个会话的行分散在每个拼花文件和数百个拼花文件中,这意味着必须遍历数百GB才能拼成一个完整的会话。因此,我希望Session通过会话ID.排序。处理是由一个单独的C++库完成的,所以我必须把会话数据管出来。在本地机器上处理整个数据集将是一件棘手的事情,但我可以应用一些选择,将数据减少到50Gb左右,我希望可以在功能强大的工作站(32core,64Gb)上在几个小时内完成。这是否可行?这个设计看起来怎么样?抱歉,这是含糊不清的,但是Spark示例要么在一个小小的JSON上非常简单,要么假设有非常深入的知识,很难从前者过渡到后者 花了几个小时浏览不同的配置选项,基本上没有什么新的开始。原来系统管理员安装了最新的Spark 3.0,但肯定有问题 我安装了spark 2.4.4,确保选择了Java8
一切正常问题与spark 3.0有关,我正在运行spark 2.4.7、hadoop 2.7.3、hadoop aws 2.7.3和aws java sdk 1.7.4,但仍面临此错误。你知道会出什么问题吗?