Wie kann ich den ReductionByKey-Teil meiner Spark-App verbessern?
Ich habe 64 Zündkerne. In meinem Cassandra-Cluster befinden sich über 80 Millionen Datenzeilen mit einer Größe von 4,2 GB. Ich brauche jetzt 82 Sekunden, um diese Daten zu verarbeiten. Ich möchte, dass dies auf 8 Sekunden reduziert wird. Irgendwelche Gedanken dazu? Ist das überhaupt möglich? Vielen Dank
Dies ist der Teil meiner Funken-App, den ich verbessern möchte:
axes = sqlContext.read.format("org.apache.spark.sql.cassandra")\
.options(table="axes", keyspace=source, numPartitions="192").load()\
.repartition(64*3)\
.reduceByKey(lambda x,y:x+y,52)\
.map(lambda x:(x.article,[Row(article=x.article,at=x.at,comments=x.comments,likes=x.likes,reads=x.reads,shares=x.shares)]))\
.map(lambda x:(x[0],sorted(x[1],key=lambda y:y.at,reverse = False))) \
.filter(lambda x:len(x[1])>=2) \
.map(lambda x:x[1][-1])
Bearbeiten
Dies ist der Code, den ich derzeit ausführe. Der oben veröffentlichte Code war ein Experiment, das die Verwirrung entschuldigt. Die Frage oben bezieht sich auf diesen Code.
axes = sqlContext.read.format("org.apache.spark.sql.cassandra").options(table="axes", keyspace=source).load().repartition(64*3) \
.map(lambda x:(x.article,[Row(article=x.article,at=x.at,comments=x.comments,likes=x.likes,reads=x.reads,shares=x.shares)])).reduceByKey(lambda x,y:x+y)\
.map(lambda x:(x[0],sorted(x[1],key=lambda y:y.at,reverse = False))) \
.filter(lambda x:len(x[1])>=2) \
.map(lambda x:x[1][-1])
Vielen Dan