gpt4 book ai didi

python-2.7 - 使用 PySpark 从表中识别分区键列

转载 作者:行者123 更新时间:2023-12-05 08:40:09 25 4
gpt4 key购买 nike

我需要帮助来使用 PySpark 查找 Hive 表的唯一分区列名称。表可能有多个分区列,输出最好返回 Hive 表的分区列列表。

如果结果还包括分区列的数据类型,那就太好了。

任何建议都会有所帮助。

最佳答案

可以使用 desc 来完成,如下所示:

df=spark.sql("""desc test_dev_db.partition_date_table""")
>>> df.show(truncate=False)
+-----------------------+---------+-------+
|col_name |data_type|comment|
+-----------------------+---------+-------+
|emp_id |int |null |
|emp_name |string |null |
|emp_salary |int |null |
|emp_date |date |null |
|year |string |null |
|month |string |null |
|day |string |null |
|# Partition Information| | |
|# col_name |data_type|comment|
|year |string |null |
|month |string |null |
|day |string |null |
+-----------------------+---------+-------+

由于此表已分区,因此您可以在此处看到分区列信息及其数据类型。

您似乎只对分区列名及其各自的数据类型感兴趣。因此,我正在创建一个元组列表。

partition_list=df.select(df.col_name,df.data_type).rdd.map(lambda x:(x[0],x[1])).collect()

>>> print partition_list
[(u'emp_id', u'int'), (u'emp_name', u'string'), (u'emp_salary', u'int'), (u'emp_date', u'date'), (u'year', u'string'), (u'month', u'string'), (u'day', u'string'), (u'# Partition Information', u''), (u'# col_name', u'data_type'), (u'year', u'string'), (u'month', u'string'), (u'day', u'string')]

partition_details = [partition_list[index+1:] for index,item in enumerate(partition_list) if item[0]=='# col_name']

>>> print partition_details
[[(u'year', u'string'), (u'month', u'string'), (u'day', u'string')]]

如果表未分区,它将返回空列表。希望这会有所帮助。

关于python-2.7 - 使用 PySpark 从表中识别分区键列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57011003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com