Python 在PySpark中寻找循环?

Python 在PySpark中寻找循环?,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我有一个Python中的集群算法,我正在尝试将其转换为PySpark(用于并行处理) 我有一个包含区域的数据集,并存储在这些区域内。我想对单个区域中的所有商店执行聚类算法 在进入ML之前,我有一些for循环。如何修改代码以删除PySpark中的for循环?我读过PySpark中的for循环通常不是一个好的实践,但我需要能够在许多子数据集上执行该模型。有什么建议吗 作为参考,我目前正在(通过熊猫数据帧)循环如下伪代码: for region in df_region: for disti

我有一个Python中的集群算法,我正在尝试将其转换为PySpark(用于并行处理)

我有一个包含区域的数据集,并存储在这些区域内。我想对单个区域中的所有商店执行聚类算法

在进入ML之前,我有一些for循环。如何修改代码以删除PySpark中的for循环?我读过PySpark中的for循环通常不是一个好的实践,但我需要能够在许多子数据集上执行该模型。有什么建议吗

作为参考,我目前正在(通过熊猫数据帧)循环如下伪代码:

for region in df_region: 
    for distinct stores in region: 
          [apply ML clustering algorithm]

搜索内置算法
你可以首先考虑基于RDD的内置聚类算法,因为它们通常是通用的,并且通过严格的验证过程被释放。

如果您更熟悉基于数据帧的API,那么可以浏览一下。您可能需要记住,从Spark 2.0开始,
Spark.mllib
包中基于RDD的API已经进入维护模式(没有新功能,只有bug修复).主要的ML API现在是
spark.ML
包中基于数据帧的API

实现自我
熊猫UDF
如果你已经有了一个模型对象,现在考虑大熊猫UDF,因为它们现在有迭代器支持(自3.0.0)。简单地说,它意味着一个模型不会被加载到每一行。
从pyspark.sql.functions导入pandas\u udf
@熊猫_udf(…)
def分类(迭代器):
模型=…#负载模型
对于迭代器中的功能:
产量模型.预测(特征)
"""
可以考虑Spark SQL或窗口函数中的GROUP BY。
这取决于您的场景,请记住数据帧仍然基于RDD。
它们是不可变的,是高级抽象。
"""
spark_df.withColumn(“聚集结果”,分类(“某些列”)).show()
RDD探索
如果不幸的是,你的聚类算法的故意执行不包括在火花内置聚类算法的集合中,并且不会有训练的进展,这意味着生成模型。你可以考虑将熊猫数据帧转换成RDD数据结构,然后实现你的聚类算法。进程将如下所示:

pandas_df=。。。。
spark_df=spark.createDataFrame(熊猫_df)
.
.
clustering_result=spark_df.rdd.map{p=>clustering_算法(p)}
注1:这只是一个粗略的过程,您可能希望根据
区域将整个数据集划分为几个RDD,然后在每个分区的RDD中执行聚类算法。因为聚类算法的信息有点不太清楚,我只能根据一些假设给出建议。
注2:RDD实现应该是您最后的选择

  • 2017年,陈进

  • 我有完全相同的问题!你能用这个解决方案解决吗?我试图避免在熊猫数据框中进行ML建模。你能找到spark版本吗?