我正在使用Spark SQL。 Spark版本2.2.2。
SQL喜欢
select a.*, b.* from a inner join b on a.id=b.id
表a和b很大。这行得通,我可以获得答案。
第二,我想将SQL结果保存到配置单元表中。 SQL喜欢:
create table xxx stored as orc as select ...
这将失败,错误代码为143。错误消息为:
ExecutorLostFailure(由于正在运行的任务之一而导致执行器268退出)原因:标记为失败的容器:主机xxx上的container_e37_1554167308087_15187_01_000269。退出状态:143。诊断:根据要求将容器杀死。退出代码为143 +详细信息 ExecutorLostFailure(由于正在运行的任务之一而导致执行器268退出)原因:标记为失败的容器:主机:xxxx上的container_e37_1554167308087_15187_01_000269。退出状态:143。诊断:根据要求将容器杀死。退出代码是143 容器退出,退出代码为非零143 被外部信号杀死
我尝试使用pyspark来使用df.saveAsTable()
。这在某些情况下有效,但并非始终如此。
有人可以帮忙吗?
谢谢。
答案 0 :(得分:1)
要解决内存问题,您可以尝试:
--executor-memory
--executor-cores
减少内核数(它们共享执行程序的RAM),请不要忘记增加内存开销以符合规范重新分区将减少每个任务的大小,同时增加内存或减少内核数将导致为每个任务分配更多的内存。
如果您不知道事先需要多少任务以及应该分配多少内存,则可以根据数据帧的大小重新分区。
df.persist()
n = df.count()
nb_records = 10
df = df.repartition(int(n / nb_records))
df.rdd.getNumPartitions()
10
在这里,我们确保按任务有10条记录,数据框有100条记录,因此我要10个分区。