Также, как упоминалось в комментариях, эта задача будет проще с использованием Spark DataFrames.
я есть следующий CSV-файл.
Index,Arrival_Time,Creation_Time,x,y,z,User,Model,Device,gt
0,1424696633908,1424696631913248572,-5.958191,0.6880646,8.135345,a,nexus4,nexus4_1,stand
1,1424696633909,1424696631918283972,-5.95224,0.6702118,8.136536,a,nexus4,nexus4_1,stand
2,1424696633918,1424696631923288855,-5.9950867,0.6535491999999999,8.204376,a,nexus4,nexus4_1,stand
3,1424696633919,1424696631928385290,-5.9427185,0.6761626999999999,8.128204,a,nexus4,nexus4_1,stand
Я должен создать RDD, где USER MODEL и GT являются ПЕРВИЧНЫМ КЛЮЧОМ, я не знаю, должен ли я сделать это, используя их в качестве кортежа.
Затем, когда у меня есть поле первичного ключа, я должен вычислить AVG, MAX и MIN из 'x', 'y' и 'z'.
Вот вывод:
User,Model,gt,media(x,y,z),desviacion(x,y,z),max(x,y,z),min(x,y,z)
a, nexus4,stand,-3.0,0.7,8.2,2.8,0.14,0.0,-1.0,0.8,8.2,-5.0,0.6,8.2
Любая идея о том, как сгруппировать их и, например, получить значения медиа из «х»
С моим текущим кодом я получаю следующее.
# Data loading
lectura = sc.textFile("Phones_accelerometer.csv")
datos = lectura.map(lambda x: ((x.split(",")[6], x.split(",")[7], x.split(",")[9]),(x.split(",")[3], x.split(",")[4], x.split(",")[5])))
sumCount = datos.combineByKey(lambda value: (value, 1), lambda x, value: (x[0] + value, x[1] + 1), lambda x, y: (x[0] + y[0], x[1] + y[1]))
Пример моих кортежей:
[(('a', 'nexus4', 'stand'), ('-5.958191', '0.6880646', '8.135345'))]