Im Moment habe ich einen ineffizienten Ansatz:Wie finde ich alle Daten, die eine ID enthalten, aus einer Liste von IDs in Spark?
ids = [...]
matched = []
for id in ids:
d = data.where(data.id == id)
d = d.take(1)
matched.append(d[0][3])
Ich frage mich, wie ich schneller dies tun können? Die Daten enthalten 4 Spalten, wobei die vierte IDs enthält.
-UPDATE-
wie dies vielleicht?
sqlContext = SQLContext(sc)
sqlContext.registerDataFrameAsTable(data, "data")
s = ','.join(str(e) for e in ids)
q = "SELECT * FROM data WHERE id IN (" + s + ")")
sqlContext.sql(q).collect()
Dies dauert 5 min statt 40 min bei der oben genannten Vorgehensweise.
Also, IDs ist eine Liste von Zeilen? Warum ist es kein RDD oder Datenrahmen? – David
Es ist ein Datenrahmen, glaube ich, aber ich bin sicher, weil ich gerade angefangen habe, Spark zu verwenden. Was ist Ihrer Meinung nach ein besserer Ansatz? – blpasd