将 hive 表卸载到。使用 Spark 或 pyspark 或 python 的 dat 文件

Posted

技术标签:

【中文标题】将 hive 表卸载到。使用 Spark 或 pyspark 或 python 的 dat 文件【英文标题】:Unload hive table into. dat file using Spark or pyspark or python 【发布时间】:2019-10-03 19:44:02 【问题描述】:

我目前正在使用 hql 将 hive 表中的数据卸载到文本文件中。因为它花费了太多时间。我想去 spark 或 pyspark。我是 spark/python 的新手。请你帮忙 目前我正在使用下面的查询来卸载

beeline --outputformat=dsv --silent=true - e 'select * from <tablename>' > /dir/samplefile.txt

如果有任何其他性能调整,请告诉我。

【问题讨论】:

为了清楚起见,您希望文件格式为 .dat.dsv。因为两者都是两种不同的格式,其中 dat 是通用类型,而 dsv 主要由 MS SQL 使用。您也可以尝试使用 Sqoop 工具 我想要文件。 dat 而不是 dsv。由于我需要将输出文件作为管道分隔文件,因此我给出了 outputformat=dsv 您可以使用存储到数据帧中的SELECT 语句读取配置单元表。然后使用 Spark 的dataframe.write 方法通过指定分隔符来获取所需位置的文件。像这样df.write.option("sep","|").option("header","true").csv(filename) 【参考方案1】:

我们不能直接写入 spark dataframe .DAT 文件,但我们可以写入多种其他格式。

为了便于理解,我将创建一个数据框并将其保存为配置单元表。

scala> val dbms = Seq((1,2,3, "asd"), (2,3,4,"wee"), (3,4,5, "wer")).toDF("a", "b", "c", "d")
dbms: org.apache.spark.sql.DataFrame = [a: int, b: int ... 2 more fields]

scala> dbms.show()
+---+---+---+---+
|  a|  b|  c|  d|
+---+---+---+---+
|  1|  2|  3|asd|
|  2|  3|  4|wee|
|  3|  4|  5|wer|
+---+---+---+---+

scala> dbms.createOrReplaceTempView("dbms")

您可以从这里开始,现在您的 hive 表名称是 dbms,要使用 spark 从 hive 表中写入数据,请按照以下步骤操作

scala> val data = spark.sql("select * from dbms")
data: org.apache.spark.sql.DataFrame = [a: int, b: int ... 2 more fields]

以 text/csv 格式编写

scala> data.write.format("com.databricks.spark.csv").option("header", "true").save("output.csv")

以广泛使用的拼花格式编写

scala> data.write.mode("overwrite").parquet("/path/to/hdfs/" + "data.parquet")

【讨论】:

以上是关于将 hive 表卸载到。使用 Spark 或 pyspark 或 python 的 dat 文件的主要内容,如果未能解决你的问题,请参考以下文章

外部覆盖后 Spark 和 Hive 表架构不同步

使用 Spark 查询 hive 表

(转)hive调优 coding调优

如何将数据写入 Hive 表?

Spark DataFrame vector 类型存储到Hive表

Spark 上的 Hive 不返回聚合或连接查询的结果