【发布时间】:2021-03-15 04:45:18
【问题描述】:
我最近开始学习 pySpark 进行网络图操作。我仍在尝试了解 spark 是如何使用数据帧工作的。
据我了解:
-
数据帧中的数据分布在一组机器上(与使用 hadoop 分布的方式相同)。
-
对数据帧的操作以相同的方式分布(或者,在我的情况下,本地使用给定数量的线程)。
我的主要问题是:在 pyspark 的 shell 中执行后,是仅对数据帧的操作分发还是所有操作(比如说在 python 的字典上)分发?
感谢任何进一步的澄清或文章。
【问题讨论】:
-
通常它只是对数据帧的操作。如果您还不能使用内置聚合函数执行此操作,您可以编写 UDF 和 UDAF 以分布式方式执行自定义逻辑。
-
@Hitobat 你好!所以,如果我理解正确的话,假设我有一个包含 1000 万个键/值对的字典。如果我实现一个将字典作为参数的 UDF,则操作将以分布式方式完成,尽管字典不是数据框?
-
您只能在数据帧上运行 udf,因此您首先需要转换输入数据。一种方法是您可以将其保存为 csv/json/avro 并使用 spark 读取它。或者直接在你的程序中使用
spark.createDataFrame()或旧的spark.parallelize().toDF()进行转换。
标签: python apache-spark pyspark