Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark s3数据帧选择失败:ConnectionClosedException内容长度过早结束_Apache Spark_Select_Amazon S3_Pyspark_Pyspark Sql - Fatal编程技术网

Apache spark Spark s3数据帧选择失败:ConnectionClosedException内容长度过早结束

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和整个生态系统都很陌生,因此我的错误对于发起人来说可能很愚蠢,但我没有发现任何支持或类似的问题被发布

我在一个S3存储桶上有很多数据(TBs),这些数据以子目录的形式被分割成数千个100Mb的拼花文件。目前,我只想查询单个文件并选择一些行。我正在本地运行spark(3.0),同时学习PySpark:

代码如下所示:

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,但仍面临此错误。你知道会出什么问题吗?