我有一個 RDD,我使用 countByvalue() 來計算資料中作業型別的頻率。我相信這已將其與 (jobType, frequency) 的密鑰對輸出。
freq_per_job=previous_val.map(lambda x:x[3]).countByValue()
這里 lambda 用于映射位于 [3] 位置的作業型別。
然后,我希望匯總作業型別并輸出前 10 種作業型別,但我似乎無法做到這一點。我曾嘗試使用 sortByKey(false) 但是我不斷收到以下錯誤:
AttributeError: 'collections.defaultdict' object has no attribute 'sortByKey'
我是 pyspark 的新手,所以我不知道如何解決這個問題。
uj5u.com熱心網友回復:
嗨,它不起作用,因為 countByValue 回傳字典而不是 RDD,而 sortByKey 等是 RDD 函式,因此有 2 種方法可以使用 RDD
- 將按值字典的計數轉換回 RDD(不建議用于大資料,因為它是在驅動程式中收集的):
freq_per_job=previous_val.map(lambda x:x[3]).countByValue()
freq_per_job_rdd=sc.parallelize(list(freq_per_job.countByValue().items()))
freq_per_job_rdd.sortByKey().collect()
- 使用 map 和 reduceByKey,然后使用 sortByKey:
freq_per_job=previous_val.map(lambda x:x[3]).map(lambda x :(x,1)).reduceByKey(_ _).sortByKey().collect()
此外,如果您只想要基于作業計數的前 10 條記錄,那么您可以使用 top 和 key 而不是 sortbykey
freq_per_job=previous_val.map(lambda x:x[3]).map(lambda x :(x,1)).reduceByKey(_ _).top(10,key=lambda x: x[1]).collect()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/492255.html
下一篇:如何使div中的按鈕居中
