如何在 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 文件