У меня есть фрейм данных pyspark с 4 столбцами: город, время года, переменная погоды, переменная_значение.Я должен разделить кадр на раздел для различных комбинаций города, сезона, weather_variable.После этого я буду применять k-means для этих разделов.
Я использую следующий код для создания разделов:
a = df_in.select('city', 'season', 'variable').distinct().toPandas().as_matrix()
dfArray = [df_in.filter("city = '{}' and season = '{}' and variable = '{}'".format(x[0], x[1], x[2])) for x in a]
Но проблема в том, что процессочень медленно, так как он использует фильтр итеративно.Может кто-нибудь предложить способ сделать процесс более эффективным.Может помочь что-то вроде groupby.
Ниже приведена версия кода Python, которую я хочу преобразовать в pyspark:
from sklearn.cluster import KMeans
def k_means_on_partition(group):
v = group['variable_value']
kmeans = KMeans(n_clusters = 7)
kmeans.fit(v.values.reshape(-1, 1))
group['cluster'] = kmeans.labels_
return group
df_out = df_in.groupby(['city', 'season', 'variable']).apply(k_means_on_partition)
Кроме того, для pyspark я буду использовать pyspark.мл вместо склеарн.