序列化任务超过了允许的最大值,在AWS集群上为pyspark

时间:2018-10-03 20:53:54

标签: sql apache-spark amazon-s3 hive pyspark

我正在编写一个在具有4个节点(32Gb ram,16核)的AWS集群上运行的pyspark脚本。该脚本读取一堆json文件(总大小约为320Mb),将其展平,创建架构,然后将其保存到s3上的Hive表中:

...
print("Done with schema creation")
mySparkDF = sqlContext.createDataFrame(convertedDF, schema)
mySparkDF.registerTempTable(tmptable)
try:
    print("executing: drop table {}".format(exttable))
    sqlContext.sql("drop table "+exttable) 
except:
    print ("Table does not exist, so can't drop it")
loc='s3://bucket_name/hive/tables/'+exttable
comline="create table " + exttable +" stored as parquet location '" + loc + "' as select * from " + tmptable

try:
    print("Executing: {}".format(comline))
    sqlContext.sql(comline)

except:
    print("FAILED executing {}".format(comline))

在执行“ sqlContext.sql(comline)”行期间的某个时刻,我的脚本因错误而失败:

  

“ ERROR FileFormatWriter:正在取消作业null。   org.apache.spark.SparkException:由于阶段失败,作业中止了:   序列化的任务100:0为152205136字节,超过了允许的最大值:   spark.rpc.message.maxSize(134217728字节)。考虑增加   spark.rpc.message.maxSize或将广播变量用于大型   值。”

我不知道该如何解决。是否可以将“创建表...”部分的执行分成较小的部分?或者我真的需要增加spark.rpc.message.maxSize吗?恐怕如果数据大小更大,它还会再次下降。请告知。

0 个答案:

没有答案