2016-01-24 1 views
0

Я играл с списком Moby Word, используя Apache Spark, вот file. я первый создал RDD, используя этот текстовый файлApache Spark union method дает необъяснимый результат

lines = sc.textFile("words.txt") 

А потом создал два РДА, содержащие слова, которые имеют «р» и «с» в них

plines = lines.filter(lambda x: "p" in x) 
    slines = lines.filter(lambda x: "s" in x) 

, а затем создал объединение этих двух

union_list = slines.union(plines) 

Я подсчитываю количество слов в каждом списке с помощью метода «подсчета» и вышел в 64803, 22969 и 87772 для slines, полилиний и union_list соответственно. Также 64803 + 22969 = 87772, что означает, что слова «p» и «s» отсутствуют. я создал новый RDD, содержащие слова с «р» и «S» с использованием

pslines = lines.filter(lambda x: ("p" in x) and ("s" in x)) 

и подсчитывал элементы, которые дали 13616, а затем создается новый РДД, содержащими слова с «р» или " с»

newlist = lines.filter(lambda x: ("p" in x) or ("s" in x)) 

и подсчитывали элементы, которые дали 74156, который имеет смысл причину 64803 + 22969-13616 = 74156. Что я сделал неправильно с помощью метода union? Я использую Spark 1.6 для Windows 10 и Python 3.5.1.

ответ

2

union() способ не является функцией объединения. Он просто конкатенации двух RDD, поэтому пересечение будет засчитано дважды. Если вы хотите истинное объединение множеств, вам нужно запустить distinct() на вашем результат РДА:

union_list = slines.union(plines).distinct()

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