Azure Databricks 上的最大消息大小

Maximum message size on Azure Databricks

我在 Azure 上使用带有 python 的数据块来处理我的 data.the 这个过程的结果将在 azure blob 存储中保存为 csv 文件。

但这就是问题所在。当结果文件超过 750 Mb 时发生错误。

经过对 google 的一些研究,我知道我必须增加我的 Scala.rc.message.maxSize,并且我做到了。问题是我可以设置的最大大小只有 2Gb,当我使用数据块分析大数据时,我确实希望文件大于 2Gb。

问题是:

  1. 2 Gb 真的是 Azure Databricks 支持的最大消息大小吗?我试图搜索并浏览 Microsoft 的官方文档,但找不到任何相关信息。

  2. 有什么方法可以增加值吗?甚至将其设置为可扩展取决于我的数据。

这是我的 python 这些过程的代码。

#mount azure storage to my databricks
dbutils.fs.mount(
  source = "wasbs://mystoragecontainer.blob.core.windows.net",
  mount_point = "/mnt/test3",
  extra_configs = {"fs.azure.account.key.mystoragecontainer.blob.core.windows.net":dbutils.secrets.get(scope = "myapps", key = "myappskey")})


#define saving process in a function
def save_data(df, savefile):
  df.coalesce(1).write.mode("overwrite").options(header="true").format("com.databricks.spark.csv").save(savefile)
  res = savefile.split('/')
  ls_target = savefile.rstrip(res[-1])
  dbutils.fs.ls(savefile+"/")
  fileList = dbutils.fs.ls(savefile+"/")
  target_name = ""
  for item in fileList:
    if item.name.endswith("csv"):
      filename= item.path
      target_parts = filename.split('/')
      target_name = filename.replace('/'+target_parts[-2]+'/', '/')
      print(target_name)
      dbutils.fs.mv(filename, ls_target)
    else:
      filename= item.path
      dbutils.fs.rm(filename, True)
  dbutils.fs.rm(savefile, True)
  dbutils.fs.mv(target_name, savefile)

# call my save function
save_data(df,"dbfs:/mnt/test3/myfolderpath/japanese2.csv")

如有任何信息,我们将不胜感激。

最佳,

如果我没理解错的话,你想合并由 :

生成的分布式 csv
df.coalesce(1).write.mode("overwrite").options(header="true").format("com.databricks.spark.csv").save(savefile) 

我建议您尝试将其转换为 pandas 数据框并写入单个 csv,如下所示:

# call my save function
df.toPandas().to_csv("/dbfs/mnt/test3/myfolderpath/japanese2.csv")

这应该会写入一个包含数据框中所有数据的 csv。 使用 Pandas 时要小心使用 /dbfs/,因为它使用文件 API 而不是 DBFS API.

另外,这是 pySpark,不是真正的 scala。