【问题标题】:Synapse notebook storage csv as a folder formatSynapse 笔记本存储 csv 作为文件夹格式
【发布时间】:2021-08-16 01:33:00
【问题描述】:

我正在使用 Azure Synapse Notebook 将 spark 数据帧作为 csv 文件存储在 blob 存储中,代码如下:

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 文件而不使它们分片?

out put of the code Inside folder, there are csv pieces

【问题讨论】:

    标签: python azure csv azure-synapse


    【解决方案1】:

    您可以使用 coalesce(1) 将输出折叠到 pyspark 中的单个文件中 注意:示例针对的是 ADLS 而不是 Blob 存储,但原理应该相同。

    # 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

    【讨论】:

      猜你喜欢
      • 2021-02-22
      • 2022-07-27
      • 2021-02-25
      • 2022-12-01
      • 2020-04-02
      • 2019-04-22
      • 1970-01-01
      • 2018-06-27
      • 2022-12-11
      相关资源
      最近更新 更多