Synapse 笔记本存储 csv 作为文件夹格式
Synapse notebook storage csv as a folder format
我正在使用 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
您可以使用 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.
我正在使用 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
您可以使用 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.