在 parquet 文件顶部从 pyspark 代码创建一个表
Posted
技术标签:
【中文标题】在 parquet 文件顶部从 pyspark 代码创建一个表【英文标题】:Create a table from pyspark code on top of parquet file 【发布时间】:2017-04-11 13:42:08 【问题描述】:我正在使用peopleDF.write.parquet("people.parquet")
in PySpark
代码将数据写入parquet
文件格式。现在我想要做的是,我想从相同的代码在这个parquet
文件之上创建一个table
,然后我可以稍后从中查询。我该怎么做?
【问题讨论】:
什么表?您可以将该镶木地板加载到 DataFrame。将其注册为临时表并使用 sparkSQL 运行查询。或者告诉我们您如何运行查询? @YuriyNedostup 我想要的是根据我编写的镶木地板文件创建一个配置单元表。我不想要临时表 您的 parquet 文件是否存储在 HDFS 中? @lurriNedostup 是的,镶木地板文件在 hdfs 中 【参考方案1】:您可以使用saveAsTable
method:
peopleDF.write.saveAsTable('people_table')
【讨论】:
但这就是将数据框保存为表格,而不是在镶木地板文件的顶部创建表格【参考方案2】:你必须像这样在hive
中创建外部表:
CREATE EXTERNAL TABLE my_table (
col1 INT,
col2 INT
) STORED AS PARQUET
LOCATION '/path/to/';
/path/to/
是 HDFS 中文件的绝对路径。
如果你想使用分区,你可以添加PARTITION BY (col3 INT)
。在这种情况下,要查看数据,您必须执行 repair
。
【讨论】:
谢谢!我知道,但如何从 pyspark 代码执行此操作? 您不必这样做。只要确保文件在目录中。每次添加新数据时,您都必须执行修复并使元数据无效才能看到更改。您可以在命令行中通过 hive 或使用 sqlWorkbench 等工具查询您的表 啊,你可以试试这个:***.com/questions/36051091/…。创建表后,您可以通过 HiveContext 加载它 我想通过pyspark代码来做是因为我想自动化创建表步骤,这样我就不必手动运行创建表命令。一旦创建了镶木地板文件,代码就会在该镶木地板文件的顶部创建表格 好吧,你可能有你自己的原因:) 我不会那样做。 pyspark 可能有一些功能可以做到这一点,但我不知道。我能看到的一种解决方案是从 DataFrame 中提取模式,将其转换为 SQL 语句并使用 HiveContext 的 sql 函数运行。以上是关于在 parquet 文件顶部从 pyspark 代码创建一个表的主要内容,如果未能解决你的问题,请参考以下文章