使用Spark将CSV转换为ORC



我看到Hortonworks的这篇博客文章,通过数据源支持Spark 1.2中的ORC。

它涵盖了1.2版本,它解决了从对象创建ORC文件的问题,而不是从csv到ORC的转换。我还看到了在Hive中进行这些转换的方法。

请有人提供一个简单的例子,说明如何从Spark 1.6+加载纯csv文件,将其保存为ORC,然后将其作为数据帧加载到Spark中。

我将放弃CSV阅读部分,因为这个问题以前已经回答过很多次了,再加上网上有很多关于这个目的的教程,再写一遍就太过分了。如果你愿意,请在这里查看!

ORC支持:

关于ORC,它们得到HiveContext的支持。

HiveContext是Spark SQL执行引擎的一个实例,它与存储在Hive中的数据集成。SQLContext提供了Spark SQL支持的一个子集,它不依赖于Hive,但ORCs、Window函数和其他功能依赖于HiveContext,后者从类路径上的Hive-site.xml读取配置。

您可以定义HiveContext如下:

import org.apache.spark.sql.hive.orc._
import org.apache.spark.sql._
val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)

如果您使用的是spark shell,则可以直接使用sqlContext来实现此目的,而无需创建hiveContext,因为默认情况下,sqlContext是作为hiveContext创建的。

在下面的SQL语句末尾指定as orc可确保配置单元表以ORC格式存储。例如:

val df : DataFrame = ???
df.registerTempTable("orc_table")
val results = hiveContext.sql("create table orc_table (date STRING, price FLOAT, user INT) stored as orc")

保存为ORC文件

让我们将DataFrame持久化到我们之前创建的配置单元ORC表中。

results.write.format("orc").save("data_orc")

要将结果存储在配置单元目录而不是用户目录中,请使用此路径而不是/apps/hive/warehouse/data_orc(来自hive default.xml的配置单元仓库路径)

最新更新