Как создать разделение, используя параметризованные несколько столбцов в spark, используя python? - PullRequest
0 голосов
/ 25 января 2020

Я хотел бы прочитать несколько столбцов из paramfile и хотел передать varialbe в функцию PartitionBy (). Таким образом, я смог разделить по нескольким столбцам путем жесткого кодирования имен столбцов. например:

def save_to_table(dataframe, db_name, tbl_nm):
   dataframe.write.mode("Append").format("parquet").partitionBy("year","month","day").saveAsTable("{}.{}".format(db_name,    tbl_nm))  
   print("Table saved")

, который работает нормально.

, но проблема в том, что я попытался прочитать файл конфигурации и сохранил все имена столбцов в списке, как показано ниже

pPartitionKey=["year","month","day"]

но не знаю, как передать список pPartitionKey в функции PartitionBy ().

Кто-нибудь может мне помочь в этом сценарии?

Ответы [ 2 ]

0 голосов
/ 25 января 2020

сохраните ваш ключ в конфигурации как

[test] // this section is mendatory
pPartitionKey=year,month,day

скрипт pyspark

import configparser
config = configparser.RawConfigParser()
config.read("config file path")
key = config.get('test','pPartitionKey').split(",")  # read the value from property file and split based on delimiter python will automatically stored into list


dataframe.write.mode("Append").format("parquet").partitionBy(key).saveAsTable("{}.{}".format(db_name,    tbl_nm))
0 голосов
/ 25 января 2020

partitionBy принимает в качестве входных данных переменное количество имен столбцов, но не список. Вы можете использовать звездочку *, чтобы достичь того, что вы ищете.

def save_to_table(dataframe, db_name, tbl_nm, pPartitionKey):
   dataframe.write.mode("Append").format("parquet").partitionBy(*pPartitionKey).saveAsTable("{}.{}".format(db_name,    tbl_nm))  
   print("Table saved")
...