如何在 DataBricks 中并行读取文件?

Posted

技术标签:

【中文标题】如何在 DataBricks 中并行读取文件?【英文标题】:How to read files in parallel in DataBricks? 【发布时间】:2020-03-19 12:29:36 【问题描述】:

谁能告诉我如何并行读取文件?我正在尝试这样的事情:

def processFile(path):
  df = spark.read.json(path)
  return df.count()

paths = ["...", "..."]

distPaths = sc.parallelize(paths)
counts = distPaths.map(processFile).collect()
print(counts)

它失败并出现以下错误:

PicklingError:无法序列化对象:异常:您似乎正试图从广播变量、操作或转换中引用 SparkContext。 SparkContext 只能在驱动程序上使用,不能在它在工作人员上运行的代码中使用。有关详细信息,请参阅 SPARK-5063。

还有其他方法可以优化吗?

【问题讨论】:

为什么不使用线程? @smx0 你能给我点文档吗? 可能要检查***.com/questions/19322079/… 这能回答你的问题吗? How to run independent transformations in parallel using PySpark? @mazaneicha 谢谢。你能补充一个答案吗?我会把它标记为答案。就我而言,这就足够了。我按类型对源进行分组并传递给 spark.read.json 【参考方案1】:

在您的特定情况下,您可以将整个 paths 数组传递给 DataFrameReader:

df = spark.read.json(paths)

...Spark 将并行读取其文件元素。

【讨论】:

以上是关于如何在 DataBricks 中并行读取文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Databricks 中迭代以读取存储在数据湖不同子目录中的数百个文件?

如何将压缩的 TSV 文件读取到 Databricks 上的数据框?

无法在 Databricks 中使用 Configparser 读取配置文件

无法在 Databricks 中使用 pyspark 读取 json 文件

无法在 azure databricks 中使用 spark 读取 csv 文件

在 Python 中读取 SQL 文件以通过 databricks 对 JDBC 运行