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())
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())
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())
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())