2015-12-23 26 views
7

'un her satırına işlev uygulayın.Spark DataFrame

Bir veri çerçevesinin her satırına bir işlev uygulamak istiyorum. Bu işlev, satırın her sütununu karıştırır ve karmaların bir listesini döndürür.

dataframe.map(row => row.toSeq.map(col => col.hashCode)) 

Bu kodu çalıştırdığımda bir NullPointerException alıyorum. Bunun SPARK-5063 ile ilgili olduğunu varsayalım.

Yuvalanmış bir harita kullanmadan aynı sonucu elde etmenin bir yolunu düşünemiyorum.

cevap

6

Bu, SPARK-5063 örneğinin bir örneği değildir, çünkü RDD dönüşümlerini yerleştirmiyorsunuz; iç .map(), bir RDD değil, bir Scala Seq'a uygulanır.

Veri kümenizdeki bazı satırların boş sütun değerleri içerdiğinden, col.hashCode çağrılarının bazıları null.hashCode değerini değerlendirmeye çalıştığınızda NullPointerExceptions atar. Bu konuda çalışmak için, karma kodları hesaplarken boş değerleri dikkate almanız gerekir.

Eğer

dataframe.map(row => row.toSeq.map(col => if (col == null) 0 else col.hashCode)) 
yapabilirsiniz Java önceki sürümlerinde,

import java.util.Objects 
dataframe.map(row => row.toSeq.map(col => Objects.hashCode(col))) 

Alternatif bir Java 7 JVM veya üstü (source), yapabileceğiniz üzerinde çalıştırıyorsanız