2016-06-06 3 views
0

Ich möchte nur die ersten 100 Frames eines tif-Bilds ändern, das über Funken und Donner geladen wird.Wie ändere ich nur ein Teil von rdd

Ich möchte den ersten 100 Frames den Perzentil_image zuweisen.

data = td.images.fromtif(path,'tif',None,None,False,1,10,None,sc,None).cache() 

downSampledImage = data.subsample(2) 

percentile_image = np.int16(np.percentile(downSampledImage[0:99, :, :], 40, 0)) 

Ich konnte nicht herausfinden, wie ich Kartenfunktion für nur einen kleinen Teil verwenden kann.

Antwort

0

Okay, ich bin nicht super vertraut mit Bildern in einer RDD. Aber, ich werde einige konzeptionelle Dinge über RDDs erklären, die Ihnen helfen könnten zu verstehen, wie Sie mit Ihrem Problem umgehen können.

  1. RDDs, sofern nicht sortiert, haben keine inhärente Ordnung. Sobald Sie etwas in eine parallelisierte, verteilte Datenstruktur eingefügt haben, gibt es keine "ersten" 100 Bilder oder "letzten" Bilder. Ja, Sie können data.first() anrufen, aber es geht wirklich nur zur ersten Partition, die es hat, die erste Zeile, die es findet, und sendet es an den Treiber. first ist eine Art irreführend. Es ist mehr wie random.

  2. Wenn Sie eine Operation auf einer RDD ausführen, verwenden Sie map. map wird auf jede einzelne Zeile angewendet. Jetzt können Sie if-else-Anweisungen verwenden, um sicherzustellen, dass die Transformation, die Sie mit Perzentilen durchführen möchten, nur für einen bestimmten Satz von 100 Zeilen gilt. So könnte man

    tun, wenn (row) erfüllt (Bedingung): np.int16 (np.percentile (downSampledImage [0:99,:,:], 40, 0))

jedoch , das erfordert, dass die ersten 100 Zeilen eine Bedingung erfüllen, damit Sie sie als relevant kennzeichnen können.

+0

Das Problem, dass es keine bestimmte Flagge gibt, sind nur die ersten 100 Frames. Ich habe etwas Dummes gemacht, ich habe SamplingImage auf die ersten 100 aufgeteilt und der Rest hat dann meine Modifikation gemacht, danach habe ich sie zusammengefügt und den Rest des Jobs gemacht. Es sollte ein anderer Weg sein. –

+0

Hm. Sind es die ersten 100 Bilder jedes Bildes (z. B. gibt es viele Sätze von 100 Bildern), oder gibt es nur eine Bildsumme in der gesamten RDD und Sie brauchen nur die ersten 100 Bilder? –

+0

Ich bin neugierig, warum dieser Weg nicht funktioniert: downSampledImage [0: 100,:,:]. Map (lambda x: perzentil_bild) warum es nicht mappt und speichert die Ergebnisse in downSampledImage. und wenn ich es in einer Variablen speichern, werde ich nur die 100 Frames haben, die für mich nutzlos sind. Es ist seltsam, warum die Karte funktioniert und nicht in ihrer Variablen gespeichert wird. –

Verwandte Themen