python - 无法将超过 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 列宽。
解决方案
推荐阅读
- apache-spark - 在pyspark数据框中的两个日期之间生成每月时间戳
- java - 使用 onClick 函数获取 EditText 字段时遇到问题
- javascript - SemanticUI 搜索 - 下拉选择不填充输入
- ios - Xcode 10 迁移错误:模块名称不是有效的标识符
- javascript - 模态 - 当下拉列表中的值更改时弹出显示。AngularJs
- python - 有效地在 pandas 中找到期货数据的近月合约
- angular - 表单验证错误消息以角度提交时显示
- java - 如何从字符串资源文件中隐藏第一项并在微调器中显示
- php - 三个mysql触发器
- c# - 检索 COM 类工厂失败错误:80040154