使用Spark将CSV转换为ORC

时间:2016-04-05 20:06:15

标签: apache-spark apache-spark-sql orc

我已经看到Hortonworks的this blog post通过数据源支持Spark 1.2中的ORC。

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

有人可以提供一个简单的示例,说明如何从Spark 1.6+加载普通的csv文件,将其保存为ORC,然后将其作为数据框加载到Spark中。

1 个答案:

答案 0 :(得分:4)

我将省略CSV阅读部分,因为该问题已经在很长一段时间内得到了解答,并且为此目的在网上提供了大量的教程,再次编写它将是一种过度的做法。 Check here if you want

ORC支持:

关于ORC,HiveContext支持它们。

HiveContext是Spark SQL执行引擎的一个实例,它与存储在Hive中的数据集成在一起。 SQLContext提供了Spark SQL支持的一个子集,它不依赖于Hive,但是ORC,Window函数和其他功能依赖于HiveContext,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可确保Hive表以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保存到我们之前创建的Hive ORC表中。

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

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