Spark 1.6 - Удалить наборы элементов только с 1 элементом

У меня есть следующий код:

val df = sqlContext.sql("SELECT Transaction_ID,Product_ID FROM Transactions as tmp")
val rawDict = df.select('Product_ID).distinct().sort('Product_ID)
val dictCounts = rawDict.groupBy('Product_ID).count().filter(col("count") >= 2)
val sigCounts = dictCounts.filter('count === 1)
val dupCounts = dictCounts.filter('count > 1) 
val sigDescs = rawDict.join(sigCounts, "Product_ID").drop('count)
val invoiceToStockCode = df.select('Transaction_ID, 'Product_ID).distinct()
val baskets = invoiceToStockCode.groupBy('Transaction_ID).agg(collect_list('Product_ID).as('StockCodes)).cache()

И я пытаюсь извлечь некоторые правила ассоциации. Для этого мне нужно гарантировать, что все транзакции выполняются более чем одним продуктом. Но с моим кодом я получаю транзакцию только с одним продуктом.

Как я могу отфильтровать это?

Спасибо!

1 ответ

Решение

Хотя я не уверен на 100%, что получил ваше требование, я думаю, что это должно сработать:

val rawDict = df.select('Product_ID).sort('Product_ID)
val dictCounts = rawDict.groupBy('Product_ID).count()
val valid = dictCounts.filter('count > 1).drop('count) // only consider counts > 1
val singleRemoved=df.join(valid,Seq("Product_ID")).distinct()
val groupedTransactions = singleRemoved.groupBy("Transaction_ID").agg(collect_list("Product_ID")) 
Другие вопросы по тегам