【问题标题】:Converting CSV to ORC with Spark使用 Spark 将 CSV 转换为 ORC
【发布时间】:2016-07-25 23:08:30
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我将省略 CSV 阅读部分,因为该问题之前已经回答了很多时间,而且为此目的在网络上提供了大量教程,再次编写它将是一种矫枉过正。 Check here if you want

    ORC 支持:

    关于 ORC,HiveContext 支持它们。

    HiveContext 是 Spark SQL 执行引擎的一个实例,它与存储在 Hive 中的数据集成。 SQLContext 提供了 Spark SQL 支持的一个子集,它不依赖于 Hive,但 ORC、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 可确保 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")
    

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

    【讨论】:

    • results变量不应该是建表的结果,而是表查询的结果,例如:val results = sqlContext.sql("select * from orc_table")
    猜你喜欢
    • 2017-09-26
    • 2019-07-01
    • 2016-07-24
    • 2019-11-30
    • 2019-06-26
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多