Mam kilka plików binarnych, które są obrazkami i jachciałbym przejść przez siebie, rozdzielając piksele: każdy węzeł mojego klastra musi uzyskać RGB innej grupy pikseli niż innych węzłów i zapisać te RGB w kolekcji Scali.
ja używam SparkContext::binaryFiles
ale nie wiem, jak sprawić, by Apache Spark był w stanie zrozumieć, że używam obrazu, że chciałbym przejść przez jego piksele za pomocą dystrybucji i że chcę uzyskać wartości RGB. Czy możesz mi pomóc to zrobić, proszę?
Odpowiedzi:
5 dla odpowiedzi № 1Spark 2.3 dodał obsługę parsowania obrazów. Możesz czytać obrazy i uzyskiwać metadane i dane obrazów w następujący sposób:
import org.apache.spark.ml.image.ImageSchema._
import java.nio.file.Paths
val images = readImages("path/to/images")
images.foreach { rrow =>
val row = rrow.getAs[Row](0)
val filename = Paths.get(getOrigin(row)).getFileName().toString()
val imageData = getData(row)
val height = getHeight(row)
val width = getWidth(row)
println(s"${height}x${width}")
}
Możesz znaleźć więcej informacji tutaj
2 dla odpowiedzi nr 2
Jeśli masz pliki binarne, wystarczy przekonwertować je na macierz liczb całkowitych (które są wartościami RGB). Przeczytaj, jak przekonwertować obrazy na tablicę RGB w scala tutaj:
http://otfried.org/scala/image.html
Oto przykład wykonany w Pythonie:
Spark za pomocą obrazów odczytu PySpark