0

我正在使用 Spark 1.6.1,在 Spark 世界中我还是个新手。我正在将文件保存为 ORC 格式。

我正在尝试将相对较大的文本文件(8 GB)解析为 ORC。文件通常很宽,即 200 多列。

列类型是基本的:Int、String、Date。我解析所有行,然后执行 persist() 并保存到文件中。

这是基本代码:

val schema = StructType(
  myTableColumns.map(
    c => StructField(
//Field descriptions ~200 fields
)))

val rowRDD = rddProcessedLines.map(line => {
  Row.fromSeq(line)
})

val fileSchemaRDD = hiveContext.createDataFrame(rowRDD, schema)

fileSchemaRDD.registerTempTable("output_table_name")
fileSchemaRDD.write.orc("output_folder")

问题是性能很差。这比从同一文本文件导入关系数据库更糟糕。

我尝试在 Snappy 和 LZF 压缩器之间切换,这里没有太多收获。我还使用了节点的内存大小和内核数量,而不是更好。然后我开始更改缓冲区大小等以进行压缩。我看到大量列的性能急剧下降。有人可以告诉在哪里看吗?有人可以指出有关 ORC 文件保存优化的有用主题吗?

4

1 回答 1

1

这种缓慢的性能是由于您尝试加载的文件的大小。要利用 spark 的分布式计算,请确保您有多个小文件以使转换更加并行。尝试将您的 8 GB 文件分成多个文件,每个文件大小为 64 MB。此外,从您的代码中,您不需要在保存之前将数据框注册到临时表,因为您以后不会用于任何其他转换。

于 2017-01-06T19:05:16.560 回答