2016-06-29 16 views
0

Können Sie helfen, Wert aus einer Zeile abzurufen, die als Parameter an einen Klassenkonstruktor übergeben wird (oder), schlagen Sie bitte einen besseren Ansatz vor. Mein Ziel ist es, den Wert aller Felder zu validieren. Jedes Feld hat ein anderes Validierungskriterium. Diesepyspark: RDD als Parameter an eine Klasse übergeben

ist, was ich tue:

Ich habe den Stock Tabelle HiveContext gelesen und in einem Datenrahmen gespeichert. Ich habe diesen Datenrahmen in RDD konvertiert. Ich gebe jede Zeile der RDD an einen Klassenkonstruktor weiter.

class Normalizer(): 
    def __init__(self,val): 
     logging.info("Normalizer start...%s"%val) 

val (in der Konsole) wie folgt aussieht:

[Row (id = u'12' , col1 = u'xx 'col2 = u'yy', ...)]

Ich habe eine Analyse-Methode für jedes Feld in Normalizer geschrieben. Jetzt muss ich jeden Feldwert an die entsprechende Methode übergeben und die Daten validieren.

Wie erhalten Sie jeden Wert des Feldes? val.id funktioniert nicht.

Oder bitte schlagen Sie vor, wenn Sie besser Ansatz haben.

Danke !!!

Antwort

1
  • Es ist wie Ihre Zeile aussieht, ist in einer Liste:

    val[0].id 
    
  • Warum nicht eine Funktion hier benutzen? Sie können einen boolean einfügen und die falschen Zeilen

    def normalize(row): 
        .... validate row.id ... 
        return Row(validated = is_validated, id=row.id) 
    
    myrdd.map(normalize) 
    
+0

Um Ihre erste Aufzählungspunkt herauszufiltern, der Grund, die Zeile in einer Liste ist, wahrscheinlich, weil sie benutzt 'nehmen()' oder 'collect'. Wenn sie über eine Kartenaussage darauf zugreift, wäre sie nicht beleuchtet. Und Ihre 2. Kugel sieht aus wie der Ansatz zu nehmen – David

+0

Danke. Ich habe den zweiten Ansatz gewählt. – Aavik

Verwandte Themen