我正在编写一个在具有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吗?恐怕如果数据大小更大,它还会再次下降。请告知。