我正在从文本文件中将100m记录加载到Spark中,然后将它们写为按日期分区的镶木地板 . 它反复失败了

15/10/01 16:46:14 WARN BlockReaderFactory: BlockReaderFactory(fileName=/user/vora/fact_pos/CALENDAR_DATE=2006-05-18/part-r-00318-831b6a4a-562d-45c2-bd58-d94be989b0bf.gz.parquet, block=BP-784895517-10.32.50.16-1441344668219:blk_1073765006_24182): error creating ShortCircuitReplica.
java.io.IOException: Illegal seek at sun.nio.ch.FileDispatcherImpl.pread0(Native Method)

Pyspark命令:

...
lines = sc.textFile("file:///path/to/file/fact_pos_100m.csv")    
...
schemaPeople.write.format("parquet").mode("overwrite").partitionBy("CALENDAR_DATE").save("fact_pos")
p_parquet = sqlContext.read.option("mergeSchema", "true").parquet("fact_pos")

HDFS日志不表示任何错误 . 这是在单节点集群上运行在Hortonworks 2.2(HDP 2.2.6.0-2800)上的Spark 1.4.1 SLES 11.3进程内存不足(我已经分配了100gb; open_files(4096)或磁盘空间(太字节)) ) . 我正在加载一个32亿行的32亿行文件 .

我的问题:有没有更好的方法将CSV文件读入spark并将其作为分区镶木地板文件写回HDFS?我需要处理一个更大的文件,而我更喜欢在不删除文件的情况下执行此操作;但火花需要将数据传输到镶木地板隔断 . 实现这一目标的最佳技术是什么?

感谢Mark Teehan Singapore