Python pyspark dataframe.write.saveAsTable内存错误
我正在循环浏览一组csv文件,其中包含Python pyspark dataframe.write.saveAsTable内存错误,python,apache-spark,dataframe,pyspark,Python,Apache Spark,Dataframe,Pyspark,我正在循环浏览一组csv文件,其中包含file\u id、mimetype、file\u data,并使用datatricksspark csv创建数据帧。然后我想把这个数据框写到一个拼花蜂巢表上。每个csv文件大约为400MB,根据包含二进制文件(PPT、PDF等)的文件\数据列的大小,包含1到n行。我遇到内存错误,不知道是否有更好的方法,或者如何分别读取或写入每个数据帧行。我正在Cloudera CDH5.5.1上的13节点集群上通过Jupyter运行pyspark for f in fil
file\u id、mimetype、file\u data
,并使用datatricks
spark csv创建数据帧。然后我想把这个数据框写到一个拼花蜂巢表上。每个csv文件大约为400MB,根据包含二进制文件(PPT、PDF等)的文件\数据列的大小,包含1到n行。我遇到内存错误,不知道是否有更好的方法,或者如何分别读取或写入每个数据帧行。我正在Cloudera CDH5.5.1上的13节点集群上通过Jupyter运行pyspark
for f in files:
fullpath = path + f
df = sqlContext.read.format('com.databricks.spark.csv') \
.options(header='false', 'inferschema='false', nullValue='NULL', treatEmptyValuesAsNulls='true') \
.load(fullpath), schema = customSchema)
print df.count()
df.write.format("parquet").mode("append").saveAsTable(tablename)
print "done"
首先,您应该在df.count()之前添加一个df.cache(),以避免在整个数据集中读取两次。另外,为什么在inferSchema
之前有一个引号,为什么在.load(fullpath)
之后有代码?到底是什么类型的错误?n是什么?如果单行较大(比如说多兆字节),那么每个执行器线程都需要大量内存。更不用说以这种格式保存行二进制文件可能不是最好的主意。