как обрабатывать RDD без итераций в pyspark - PullRequest
1 голос
/ 27 июня 2019

У меня есть RDD, который я читаю из файла с текущим форматом

199.72.81.55 - - [01 / Jul / 1995: 00: 00: 01 -0400] "GET / history / apollo / HTTP / 1.0" 200 6245 unicomp6.unicomp.net - - [01 / Jul / 1995: 00: 00: 06 -0400] "GET / shuttle / countdown / HTTP / 1.0" 200 3985 ...

Я получил нужные поля с этим фрагментом кода:

rdd = rdd.map(lambda x : (x.split(" ")[0], x.split(" ")[3][1:12], x.split(" ")[5], x.split(" ")[7], x.split(" ")[8]))

и теперь, добавив, я получил эту настройку

    rdd.take(4)
[('199.72.81.55', '01/Jul/1995', '"GET', 'HTTP/1.0"', '200'), ('unicomp6.unicomp.net', '01/Jul/1995', '"GET', 'HTTP/1.0"', '200'), ('199.120.110.21', '01/Jul/1995', '"GET', 'HTTP/1.0"', '200'),('199.120.110.21', '01/Jul/1995', '"GET', 'HTTP/1.0"', '200')]

Мне нужны уникальные хосты для этого файла, поэтому я сделал это:

    rdd2 = rdd.map(lambda x : x[0])

и я получил это:

    rdd2(take(4))
    ['199.72.81.55', 'unicomp6.unicomp.net', '199.120.110.21', '199.120.110.21']

пока, так хорошо но теперь у меня проблема, которую я не могу понять

    h = set()
    rdd2.map(lambda x: h.add(x))  #line with error, i suppose
    print(h)
    {} # the set is empty, i have no idea why my set isn't adding the values to the set

я ожидаю, что это набор с уникальными значениями, такими как:

{'199.72.81.55', 'unicomp6.unicomp.net', '199.120.110.21'}

может кто-нибудь указать мне, почему лямбда-добавление значения к набору не работает

...