2016-05-16 5 views
1

Я запустил код на своем компьютере и с частым выделением шаблонов. Я использую FP-рост, но 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) 

Примечания:

  • это хорошая идея cache данных перед запуском FPGrowth.
  • субъективно это не лучший выбор для данных, которые вы используете.
+0

Да, я нашел корень проблемы, я обеспечу уникальность данных и большое спасибо. –

+0

Другая проблема, как сохранить результат в локальном файле? Я попробовал saveAsTextFile() и write(), но он возвращает ошибку, спасибо. –

+0

Используйте 'model.save'. – zero323

Смежные вопросы