Хранилище записных книжек Synapse csv в формате папки

#python #azure #csv #azure-synapse

Вопрос:

Я использую Azure Synapse Notebook для хранения фрейма данных spark в виде csv-файла в хранилище больших двоичных объектов со следующим кодом:

 def pandas_to_spark(pandas_df):
    columns = list(pandas_df.columns)
    types = list(pandas_df.dtypes)
    struct_list = []
    for column, typo in zip(columns, types): 
      struct_list.append(define_structure(column, typo))
    p_schema = StructType(struct_list)
    return sqlContext.createDataFrame(pandas_df, p_schema)

def define_structure(string, format_type):
    try: typo = equivalent_type(format_type)
    except: typo = StringType()
    return StructField(string, typo)


csvString = str(r_csv.content.decode('latin-1'))
csvString = csvString.replace('Metadata Internal','')
df = pd.read_csv(io.StringIO(csvString), sep= ',')
df_2 = df[['Metadata ID','Metadata Title']]
sparkdf = pandas_to_spark(df_2)
sparkdf.show()
csv_report_path = wasbs_path   'UUID_List.csv' 
sparkdf.write.csv(csv_report_path, mode = 'overwrite', header = 'true')
 

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

Как я могу хранить csv-файл, не разбивая его на части?

выход из кода
Внутри папки есть фрагменты csv

Ответ №1:

Вы можете свернуть выходные данные в один файл в pyspark, используя coalesce(1) ПРИМЕЧАНИЕ.Пример предназначен для ADL вместо хранилища больших двоичных объектов, но принцип должен быть тем же.

 # Output using Spark
output_container_path = "abfss://{your_container_name}@{your_account_name}.dfs.core.windows.net"
full_output_name = "{}/{}/{}".format(output_container_path,output_folder_name,output_blob_name)

(queryData
 .coalesce(1)
 .write
 .mode("overwrite")
 .option("header", "true")
 .format("com.databricks.spark.csv")
 .save(full_output_name))
 

Недостатком является то, что вы получите 1 файл, но вы не можете контролировать имя, поэтому у него будет очень бесполезное имя, например QID1599336_20210414_184911_0.txt.