Ich habe madde ein dataaframe die repartitined I basierend auf ihren Primärschlüssel auf den KnotenMuss ich Caching nach repartitining
val config=new SparkConf().setAppName("MyHbaseLoader").setMaster("local[10]")
val context=new SparkContext(config)
val sqlContext=new SQLContext(context)
val rows="sender,time,time(utc),reason,context-uuid,rat,cell-id,first-pkt,last-pkt,protocol,sub-proto,application-id,server-ip,server-domain-name, http-proxy-ip,http-proxy-domain-name, video,packets-dw, packets-ul, bytes-dw, bytes-ul"
val scheme= new StructType(rows.split(",").map(e=>new StructField(e.trim,StringType,true)))
val dFrame=sqlContext.read
.schema(scheme)
.format("csv")
.load("E:\\Users\\Mehdi\\Downloads\\ProbDocument\\ProbDocument\\ggsn_cdr.csv")
dFrame.registerTempTable("GSSN")
dFrame.persist(StorageLevel.MEMORY_AND_DISK)
val distincCount=sqlContext.sql("select count(distinct sender) as SENDERS from GSSN").collectAsList().get(0).get(0).asInstanceOf[Long]
dFrame.repartition(distincCount.toInt/3,dFrame("sender"))
Muss ich wieder meine presist Methode aufrufen, nachdem für die nächste Reduzierung Jobs auf Datenrahmen neu zu partitionieren?
Korrigiere mich, wenn ich falsch liege, aber ich denke, es gibt kein Caching während des Mischens, nur das Ergebnis der Kartenphase wird auf die Festplatte gelegt. Es ist schnell, ShuffleRDD aus diesen Dateien neu zu berechnen, wenn sie sich im OS-Cache befinden, aber das ist nicht garantiert. – Dikei
@Dikei Sie sind nicht falsch, aber es hat keinen Einfluss auf meine Meinung. Wenn OP Schreibvorgänge von Anfang an auf Festplatte annimmt und möglicherweise die gleichen Daten zweimal auf Platte legt, ist das ziemlich verschwenderisch. Und da Caching weder kostenlos noch garantiert ist, sehe ich hier keinen Grund für eine solche Redundanz. Es war nur In-Memory oder Off-Heap, vielleicht ... aber ich könnte mich irren. Denkst du, dass es hier wirklich Sinn macht? – zero323
Ich denke, es hängt davon ab, was der Rest des Programms tut. – Dikei