首页 > 解决方案 > 无法将超过 1000 条记录写入 HDFS 配置单元表 pyspark

问题描述

我正在尝试对数据集进行一些操作。如果我对选择执行 LIMIT 到 1000 条记录,插入运行良好,您可以在代码的注释部分中看到。这让我相信这是一个内存问题。到目前为止,我已经更改了以下 yarn-site.xml 设置

spark.shuffle.memoryFraction = 0

spark.executor.overhead.memory = 1024

spark.driver.overhead.memory = 1024

我的 spark-submit 如下所示:

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 列宽。

标签: pythonapache-sparkpysparkapache-spark-sqlpyspark-sql

解决方案


推荐阅读