Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 总分配超过堆内存的95.00%(960285889字节)-pyspark错误_Python_Csv_Pyspark_Heap_Parquet - Fatal编程技术网

Python 总分配超过堆内存的95.00%(960285889字节)-pyspark错误

Python 总分配超过堆内存的95.00%(960285889字节)-pyspark错误,python,csv,pyspark,heap,parquet,Python,Csv,Pyspark,Heap,Parquet,我用Python2.7编写了一个脚本,使用pyspark将csv转换为拼花地板和其他东西。 当我在一个小数据上运行脚本时,它工作得很好,但是当我在一个更大的数据(250GB)上运行脚本时,我遇到了以下错误-总分配超过了堆内存的95.00%(960285889字节)。 我怎样才能解决这个问题?这一切发生的原因是什么? tnx 代码的一部分: 已导入的库: 将pyspark导入为ps 从pyspark.sql.types导入StructType、StructField、IntegerType、, D

我用Python2.7编写了一个脚本,使用pyspark将csv转换为拼花地板和其他东西。 当我在一个小数据上运行脚本时,它工作得很好,但是当我在一个更大的数据(250GB)上运行脚本时,我遇到了以下错误-总分配超过了堆内存的95.00%(960285889字节)。 我怎样才能解决这个问题?这一切发生的原因是什么? tnx

代码的一部分: 已导入的库:
将pyspark导入为ps
从pyspark.sql.types导入StructType、StructField、IntegerType、,
DoubleType、StringType、TimestampType、LongType、FloatType
从集合导入订单
从系统导入argv

使用pyspark:

 schema_table_name="schema_"+str(get_table_name())
 print (schema_table_name)
 schema_file= OrderedDict()

schema_list=[]
ddl_to_schema(data)
for i in schema_file:
schema_list.append(StructField(i,schema_file[i]()))

schema=StructType(schema_list)
print schema

spark = ps.sql.SparkSession.builder.getOrCreate()
df = spark.read.option("delimiter", 
",").format("csv").schema(schema).option("header", "false").load(argv[2])
df.write.parquet(argv[3])

# df.limit(1500).write.jdbc(url = url, table = get_table_name(), mode = 
  "append", properties = properties)
# df = spark.read.jdbc(url = url, table = get_table_name(), properties = 
  properties)
pq = spark.read.parquet(argv[3])
pq.show()
只是为了澄清schema_table_name意味着保存所有表名(在适合csv的DDL中)


函数ddl_to_模式只需获取一个常规ddl并将其编辑为拼花地板可以使用的ddl。

似乎您的驱动程序内存不足

默认情况下,驱动程序内存设置为1GB。由于您的程序使用了95%的内存,因此应用程序的内存不足

您可以尝试更改它,直到达到满足以下需求的“最佳点”:我将其设置为2GB:

pyspark——驱动程序内存2g

您也可以使用executor内存,尽管这里似乎没有问题(executor的默认值为4GB)

pyspark——驱动程序内存2g——执行器内存8g

理论上,spark actions可以将数据卸载到驱动程序,如果大小不合适,会导致内存不足。我不能确定你的情况,但似乎是笔迹造成的

您可以在此处查看理论(阅读驱动程序程序,然后检查操作):


如果您运行的是本地脚本,而不是直接使用
spark submit
,则可以执行以下操作:

import os

os.environ["PYSPARK_SUBMIT_ARGS"] = "--driver-memory 2g"

给我们看一些代码…在问题中添加代码,而不是在comments@Loreloreloretnx!看起来您唯一的解决方案是不将整个文件读入内存。@usr2564301我的意思是,可能这是一个标志,我应该增加其中定义的数字。。。因为我看到了一个类似“set.memory.driver”的命令,但我无法真正理解tnx的回复!谢谢你的帮助!我想问我应该在哪里输入命令pyspark--driver memory 2g?在我的python脚本中?在Linux终端中?如果您使用的是spark 2.x,我相信您可以使用:./bin/spark submit mypythonfile.py--driver memory 2G我这样做了,并确保驱动程序内存现在是2gb(我将其打印到控制台),但仍然会收到相同数字的相同错误。您是否也尝试过更改执行器内存(在2.4上,它默认为1G)?@Pythonist您的问题在更改执行器内存后得到解决了吗?如果没有,你能建议你还尝试了什么吗?