python - 总分配超过堆内存的 95.00%(960,285,889 字节)- pyspark 错误

标签 python csv pyspark heap-memory parquet

我用 python 2.7 编写了一个脚本,使用 pyspark 将 csv 转换为 parquet 和其他内容。 当我在小数据上运行脚本时,它运行良好,但是当我在更大的数据(250GB)上运行脚本时,我遇到了以下错误 - 总分配超过堆内存的 95.00%(960,285,889 字节)。 我怎么解决这个问题?发生这种情况的原因是什么? tnx!

部分代码: 导入的库: 导入 pyspark 作为 ps 从 pyspark.sql.types 导入 StructType、StructField、IntegerType、 Double 类型、String 类型、Timestamp 类型、Long 类型、Float 类型 从集合导入 OrderedDict 从系统导入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_schema 只需采用常规 ddl 并将其编辑为 parquet 可以使用的 ddl。

最佳答案

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

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

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

pyspark --驱动程序内存 2g

您也可以使用执行程序内存,尽管这似乎不是这里的问题(执行程序的默认值为 4GB)。

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

理论是,如果大小不合适,spark 操作可以将数据卸载到驱动程序,导致内存不足。我无法确定您的情况,但似乎是写入造成了这种情况。

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

https://spark.apache.org/docs/2.2.0/rdd-programming-guide.html#actions

关于python - 总分配超过堆内存的 95.00%(960,285,889 字节)- pyspark 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53407442/

相关文章:

python - 如何收集结构任务输出并打印多个主机的摘要?

python - pandas to_csv — 不编码文件名或路径

Python:检查列表中的文件是否存在,只有存在时才执行函数

python - 如何spark-submit存储在GCP存储桶中的.py文件?

python - 如何将 sklearn 管道转换为 pyspark 管道?

apache-spark - 如何在 Pyspark 中以编程方式解析固定宽度的文本文件?

python - "import"是 pythonic 数据吗?

python - 使用 Selenium 改进容器中元素的 Web 抓取

python - 在 Python 中从(字符串)元组写入 csv

UNIX 用指数值排序?