18.11.15更新,因為代碼用set的話集群跑不了,所以更改為一直用dataframe進行操作,發現Pandas和spark中對dataframe的操作不同,所以增加了pandas的group操作
最近進行關聯規則算法的學習,使用的是tpch里的數據,取了customer和part兩行數據如圖
而關聯規則算法要求的數據格式為{customer|part1,part2,part3……},因此要根據customer號進行合並,由於使用的是spark讀取tpch的數據,所以讀取出來是rdd或者dataframe的形式,所以要使用rdd自帶的方法groupByKey。
首先讀取數據得到rdd1
hive_context = HiveContext(spark) hive_context.sql('use tpch') customerPartDf = hive_context.sql(" SELECT c.C_CUSTKEY customer,i.L_PARTKEY part \ FROM customer c,orders o,lineitem i WHERE c.C_CUSTKEY=o.O_CUSTKEY and o.O_ORDERKEY=i.L_ORDERKEY") customerPartDf.show() customerPartDf1=customerPartDf.rd
然后直接使用groupByKey方法得到rdd2
customerPartDf2 = customerPartDf1.groupByKey()
這時候其實已經完成了group操作,但是使用時發現顯示有錯誤
customerPartDf2.show()
這是因為並沒有直接對rdd進行group操作,而是做了一個操作標記,所以並未直接顯示操作結果,但在后面的操作中可以發現group成功
customerPartDf3 = customerPartDf2.mapValues(list) print(customerPartDf3.collect())
可以看到group操作成功
轉換成dataframe的效果是
標題欄又消失了,不過下面的算法暫時用不到,所以先放,遇到的時候再研究
另外一開始用的是reduceByKey,后來發現好像是計數功能
Pandasgroup操作:https://blog.csdn.net/youngbit007/article/details/54288603