dataframe.topandas总是在驱动程序节点还是工作节点上?

jjjwad0x  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(353)

假设您正在通过sparkcontext和hive加载一个大型数据集。所以这个数据集就分布在你的spark集群中。例如,对数千个变量的观察(值+时间戳)。
现在您可以使用一些map/reduce方法或聚合来组织/分析数据。例如,按变量名分组。
分组后,可以将每个变量的所有观察值(值)作为一个timeseriesDataframe。如果现在使用dataframe.topandas

def myFunction(data_frame):
   data_frame.toPandas()

df = sc.load....
df.groupBy('var_name').mapValues(_.toDF).map(myFunction)

是否将其转换为每个工作节点上的Dataframe(每个变量),或者
Dataframe是否始终在驱动程序节点上,因此数据从工作节点传输到驱动程序?

fafcakar

fafcakar1#

Pandas没有什么特别的 DataFrame 在这种情况下。
如果 DataFrame 通过使用 toPandas 上的方法 pyspark.sql.dataframe.DataFrame 这将收集数据并在驱动程序上创建本地python对象。
如果 pandas.core.frame.DataFrame 在executor进程内创建(例如 mapPartitions )你只需要 RDD[pandas.core.frame.DataFrame] . Pandas和其他物体之间没有区别 tuple .
最后,示例中的伪代码无法工作,因为您无法(以合理的方式)创建spark DataFrame (我想这就是你的意思 _.toDF )执行器线程内部。

相关问题