Gördün mü, neden böyle yapıyorsun işe yaramıyor. İlk olarak, bir Satır Tipinden tamsayı almaya çalışıyorsunuz , koleksiyonunuzun çıktısı şu şekildedir :
>>> mvv_list = mvv_count_df.select('mvv').collect()
>>> mvv_list[0]
Out: Row(mvv=1)
Böyle bir şey alırsan:
>>> firstvalue = mvv_list[0].mvv
Out: 1
mvv
Değeri alacaksın . Dizinin tüm bilgilerini istiyorsanız, şöyle bir şey alabilirsiniz:
>>> mvv_array = [int(row.mvv) for row in mvv_list.collect()]
>>> mvv_array
Out: [1,2,3,4]
Ancak diğer sütun için de aynısını denerseniz, şunu elde edersiniz:
>>> mvv_count = [int(row.count) for row in mvv_list.collect()]
Out: TypeError: int() argument must be a string or a number, not 'builtin_function_or_method'
Bunun nedeni count
yerleşik bir yöntem olmasıdır. Ve sütun ile aynı ada sahip count
. Bunu yapmanın bir geçici çözüm sütun adını değiştirmek olduğunu count
için _count
:
>>> mvv_list = mvv_list.selectExpr("mvv as mvv", "count as _count")
>>> mvv_count = [int(row._count) for row in mvv_list.collect()]
Ancak, sütuna sözlük sözdizimini kullanarak erişebileceğiniz için bu geçici çözüm gerekli değildir:
>>> mvv_array = [int(row['mvv']) for row in mvv_list.collect()]
>>> mvv_count = [int(row['count']) for row in mvv_list.collect()]
Ve sonunda işe yarayacak!
list(df.select('mvv').toPandas()['mvv'])
. Ok PySpark entegre edilmiş hızlandırdıtoPandas
anlamlı. Spark 2.3+ kullanıyorsanız diğer yaklaşımları kullanmayın. Daha fazla kıyaslama ayrıntısı için cevabıma bakın.