2016-05-16 21 views
1

私は自分のコンピューターと頻繁なパターンマイニングでコードを実行しました。私はFP成長を使用していますが、pysparkはエラーを投げます。どのように解決するかわからないので、pysparkを使用している人が私を助けることができますか?FP成長 - トランザクション内のアイテムは一意である必要があります

まず私は、このステップは、誤りがない

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

関連する問題