我正在尝试对数据集进行一些操作。您可以在代码的注释掉部分中看到,如果我对选择的1000条记录进行LIMIT操作,则插入可以正常运行。这使我相信这是一个内存问题。到目前为止,我已经更改了以下yarn-site.xml设置
spark.shuffle.memoryFraction = 0
spark.executor.overhead.memory = 1024
spark.driver.overhead.memory = 1024
我的火花提交如下:
spark-submit transfer.py --num-executors 8 --deploy-mode cluster --executor-memory 4g --driver-memory 0 --executor-cores 4
Python代码: 表名称和列名称在下面的代码中已被遮盖。
from os import getcwd
from pyspark.sql import HiveContext
from pyspark import SparkConf
from pyspark import SparkContext
conf = SparkConf()
conf.setMaster('yarn-client')
conf.setAppName('spark-yarn')
sc = SparkContext(conf=conf)
hive_context = HiveContext(sc)
from pyspark.sql import functions as F
from pyspark.sql import Window
from pyspark.sql.functions import col
from pyspark.sql.functions import array
df = hive_context.table("schema.sourcedata")
df1 = df.groupBy('val1',).\
agg(F.collect_set('val2').alias('val2'),
F.collect_set('val3').alias('val3'),
F.collect_set('val4').alias('val4'),
F.collect_set('val5').alias('val5'),
F.collect_list('val6').alias('val6'))
newDF = df1.repartition(3000)
#testdf2.count()
#df1.registerTempTable("temp_table")
#hive_context.sql("CREATE TABLE schema.table AS SELECT val1,val2,val3,val4,val5,val6 FROM temp_table LIMIT 100000")
newDF.write.mode("overwrite").saveAsTable("schema.resulttable");
我现在没有收到错误,仅完成199/200任务,然后挂起长达15小时的小时。 df为910,000行和6列宽。