Úloha 7.1

V prostredí PySpark napíšte príkazy, ktoré: Pre zvolené pole číselných hodnôt vypočítajú sumu párnych čísiel. Pre zvolené pole dvojíc kľúč-hodnota, kde hodnota je číslo vypočítajú sumu štvorcov hodnôt pre každý kľúč.

from pyspark import SparkContext
sc = SparkContext(appName="example23")

rdd = sc.parallelize([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
filtered_rdd = rdd.filter(lambda x: x % 2 == 0)
print(filtered_rdd.reduce(lambda x, y: x + y))

kv_pairs = sc.parallelize([("a", 1), ("c", 5), ("a", 5), ("a", 3), ("b", 3), ("b", 4), ("b", 2)])
square_kv = kv_pairs.mapValues(lambda x: x*x)
kv_pairs_square = square_kv.reduceByKey(lambda x, y: x + y)
print(kv_pairs_square.collect())

            

Úloha 7.2

Napíšte v Pythone pomocou Spark transformácií a akcií kód, ktorý spočíta počet výskytov slov vo vstupnom textovom súbore (ako vstupný súbor môžete použiť text z Úlohy 2.3).

rawdata = sc.textFile("./untitled.txt")
words = rawdata.flatMap(lambda line: line.split(" "))
kv_words = words.map(lambda w: (w.lower(),1))
kv_words_count = kv_words.reduceByKey(lambda x, y: x + y) 
print(kv_words_count.collect())
            

Úloha 7.3

Pre dáta z dátovej množiny KDD Cup z príkladu na cvičení napíšte kód, ktorý vypíše pre nominálne atribúty (atribúty s indexmi 1,2,3) počet ich rôznych hodnôt.

import urllib
import csv
            
urllib.request.urlretrieve("http://kdd.ics.uci.edu/databases/kddcup99/kddcup.data_10_percent.gz", "kddcup.data_10_percent.gz")
rdd = sc.textFile("./kddcup.data_10_percent.gz")
rdd = rdd.mapPartitions(lambda x: csv.reader(x))
header = rdd.first()
rdd = rdd.filter(lambda x: x != header)
            
rdd1 = rdd.flatMap(lambda x: x[1])
kv1 = rdd1.map(lambda x: (x,1))
kv1 = kv1.groupByKey()
print(kv1.count())
            
rdd2 = rdd.flatMap(lambda x: x[2])
kv2 = rdd2.map(lambda x: (x,1))
kv2 = kv2.groupByKey()
print(kv2.count())
            
rdd3 = rdd.flatMap(lambda x: x[3])
kv3 = rdd3.map(lambda x: (x,1))
kv3 = kv3.groupByKey()
print(kv3.count())

Úloha 7.4

Pre dáta z dátovej množiny KDD Cup z príkladu na cvičení napíšte kód, ktorý vypočíta pre všetky záznamy s cieľovým atribútom (index 41) s hodnotou normal priemerný a celkový čas pripojenia (atribút s indexom 0).

import urllib
import csv
            
urllib.request.urlretrieve("http://kdd.ics.uci.edu/databases/kddcup99/kddcup.data_10_percent.gz", "kddcup.data_10_percent.gz")
rdd = sc.textFile("./kddcup.data_10_percent.gz")
rdd = rdd.mapPartitions(lambda x: csv.reader(x))
rdd = rdd.filter(lambda x: 'normal' not in x[41])
rdd = rdd.map(lambda x: int(x[0]))
rdd_sum = rdd.reduce(lambda x, y: x+y)
            
print(rdd_sum)
print(rdd_sum/rdd.count())

© 2016, 2017, 2018, 2019 Peter Bednár, Martin Sarnovský, Miroslav Smatana, Zuzana Tocimáková