2016-05-16 56 views
1

我已經在我的計算機中運行代碼並使用頻繁模式挖掘。我使用FP-growth,但是pyspark拋出一個錯誤,我不知道如何解決它,所以有人可以使用pyspark幫助我嗎?FP-growth - 交易中的項目必須是唯一的

首先,我得到

data = sc.textFile(somewhere) 

這一步沒有錯誤的數據 然後

transactions = data.map(lambda line: line.strip().split(' ')) 

接下來是

model = FPGrowth.train(transactions, minSupport=0.2, numPartitions=10) 

它拋出一個錯誤

An error occurred while calling o19.trainFPGrowthModel.:org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 1.0 failed 1 times, most recent failure: Lost task 1.0 in stage 1.0 (TID 3, localhost): org.apache.spark.SparkException: Items in a transaction must be unique but got WrappedArray(, , A, , Seq, 0xBB20C554Ack, 0xE6A8BA01Win, 0x7D78TcpLen, 20). 

我的數據是這樣的

transactions.take(1) 

[[u'03/07', 
    u' 10', 
    u' 22', 
    u' 04.439824', 
    u' 139', 
    u' 1', 
    u' 1', 
    u' spp_sdf', 
    u' SDFCombinationAlert', 
    u' Classification', 
    u' SenstiveData', 
    u' Priority', 
    u' 2', 
    u' PROTO', 
    u' 254', 
    u' 197.218.177.69', 
    u' 172.16.113.84']] 

回答

4

那麼,你得到的例外是非常不言自明。傳遞給FP增長的每個存儲桶都必須包含一組項目,因此不會有重複項目。因此,例如,這不是有效的輸入:

transactions = sc.parallelize([["A", "A", "B", "C"], ["B", "C", "A", "A"]]) 
FPGrowth.train(transactions, minSupport=0.2, numPartitions=10) 
## Py4JJavaError: An error occurred while calling o71.trainFPGrowthModel. 
## ... 
## Caused by: org.apache.spark.SparkException: 
## Items in a transaction must be unique but got WrappedArray(A, A, B, C). 

您已確保項目在通過這些下游之前是唯一的。

unique = transactions.map(lambda x: list(set(x))).cache() 
FPGrowth.train(unique, minSupport=0.2, numPartitions=10) 

注意

  • 是奔跑FPGrowth前一個好主意,cache數據。
  • 主觀上它不是您使用的數據的最佳選擇。
+0

是的,我找到了問題的根源,我將確保數據的唯一性,並且非常感謝您。 –

+0

另一個問題,我如何將結果保存到本地文件?我一直嘗試saveAsTextFile()和write(),但它返回一個錯誤,謝謝。 –

+0

使用'model.save'。 – zero323

相關問題