দেখুন, আপনি কেন এইভাবে করছেন তা কাজ করছে না। প্রথমত, আপনি একটি সারি টাইপ থেকে পূর্ণসংখ্যার চেষ্টা করছেন , আপনার সংগ্রহের আউটপুটটি এরকম:
>>> mvv_list = mvv_count_df.select('mvv').collect()
>>> mvv_list[0]
Out: Row(mvv=1)
আপনি যদি এই জাতীয় কিছু গ্রহণ করেন:
>>> firstvalue = mvv_list[0].mvv
Out: 1
আপনি mvv
মান পাবেন। আপনি যদি অ্যারের সমস্ত তথ্য চান তবে আপনি এই জাতীয় কিছু নিতে পারেন:
>>> mvv_array = [int(row.mvv) for row in mvv_list.collect()]
>>> mvv_array
Out: [1,2,3,4]
তবে আপনি যদি অন্য কলামের জন্য একই চেষ্টা করেন তবে আপনি পাবেন:
>>> 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'
এটি count
অন্তর্নির্মিত পদ্ধতি হওয়ায় এটি ঘটে । এবং কলামটির একই নাম রয়েছে count
। এই কাজ করতে একটি কার্যসংক্রান্ত কলাম নাম পরিবর্তন হয় count
থেকে _count
:
>>> mvv_list = mvv_list.selectExpr("mvv as mvv", "count as _count")
>>> mvv_count = [int(row._count) for row in mvv_list.collect()]
অভিধানের বাক্য গঠনটি ব্যবহার করে আপনি কলামটি অ্যাক্সেস করতে পারেন, তবে এই কাজের দরকার নেই:
>>> mvv_array = [int(row['mvv']) for row in mvv_list.collect()]
>>> mvv_count = [int(row['count']) for row in mvv_list.collect()]
এবং অবশেষে এটি কাজ করবে!
list(df.select('mvv').toPandas()['mvv'])
। তীরটি পাইস্পার্কে সংহত হয়েছিল যাtoPandas
উল্লেখযোগ্যভাবে বৃদ্ধি পেয়েছিল । আপনি যদি স্পার্ক ২.৩+ ব্যবহার করেন তবে অন্যান্য পদ্ধতিগুলি ব্যবহার করবেন না। আরও বেঞ্চমার্কিং বিশদ জন্য আমার উত্তর দেখুন।