我想使用sparkDataframe的模式创建一个配置单元表。我该怎么做?
对于固定列,我可以使用:
val CreateTable_query = "Create Table my table(a string, b string, c double)"
sparksession.sql(CreateTable_query)
但是我的数据框中有很多列,那么有没有方法自动生成这样的查询呢?
我想使用sparkDataframe的模式创建一个配置单元表。我该怎么做?
对于固定列,我可以使用:
val CreateTable_query = "Create Table my table(a string, b string, c double)"
sparksession.sql(CreateTable_query)
但是我的数据框中有很多列,那么有没有方法自动生成这样的查询呢?
5条答案
按热度按时间pdsfdshx1#
从spark 2.4开始,您可以使用函数dataframe.schema.toddl来获取列名和类型(甚至对于嵌套结构)
kuhbmx9i2#
另一种方法是使用structtype上可用的方法。。sql、simplestring、treestring等。。。
您可以从Dataframe的模式创建DDL,也可以从DDL创建Dataframe的模式。。
这里有一个例子-(直到spark 2.3)
现在我有了Dataframe。在实际情况中,您可以使用dataframe读取器从文件/数据库创建dataframe。让我们使用它的模式来创建ddl
spark2.4以后,您可以在structtype上使用fromdll和toddl方法-
gmxoilav3#
根据您的问题,您似乎希望使用Dataframe的模式在配置单元中创建表。但正如您所说的,数据框中有许多列,因此有两个选项
首先是通过Dataframe创建直接配置单元表。
第二个是获取这个Dataframe的模式并在配置单元中创建表。
考虑以下代码:
ymzxtsji4#
假设您使用的是spark 2.1.0或更高版本,my\ u df是您的Dataframe,
另一种方法是使用temp表
mcvgt66p5#
这里是pyspark版本从parquet文件创建配置单元表。您可能已经使用推断的模式生成了Parquet文件,现在需要将定义推送到配置单元元存储区。您还可以将定义推送到系统中,比如aws glue或aws athena,而不仅仅推送到hive metastore。这里我使用spark.sql来推送/创建永久表。