2017-10-09 2 views
-1

Ich habe zwei Datensatz -Datensatz 1 ist unterErsetzen Nullwert mit leeren Wert in Datenfunkenrahmen nicht funktioniert

LineItem.organizationId|^|LineItem.lineItemId|^|StatementTypeCode|^|LineItemName|^|LocalLanguageLabel|^|FinancialConceptLocal|^|FinancialConceptGlobal|^|IsDimensional|^|InstrumentId|^|LineItemSequence|^|PhysicalMeasureId|^|FinancialConceptCodeGlobalSecondary|^|IsRangeAllowed|^|IsSegmentedByOrigin|^|SegmentGroupDescription|^|SegmentChildDescription|^|SegmentChildLocalLanguageLabel|^|LocalLanguageLabel.languageId|^|LineItemName.languageId|^|SegmentChildDescription.languageId|^|SegmentChildLocalLanguageLabel.languageId|^|SegmentGroupDescription.languageId|^|SegmentMultipleFundbDescription|^|SegmentMultipleFundbDescription.languageId|^|IsCredit|^|FinancialConceptLocalId|^|FinancialConceptGlobalId|^|FinancialConceptCodeGlobalSecondaryId|^|FFAction|!| 
Japan|^|1507101869432|^|4295876606|^|1|^|BAL|^|Cash And Deposits|^|null|^|null|^|ACAE|^|false|^|null|^|null|^|null|^|null|^|false|^|null|^|null|^|null|^|null|^|505126|^|505074|^|null|^|null|^|null|^|null|^|null|^|null|^|null|^|3018759|^|null|^|I|!| 

Und das ist, wie ich Daten mit Auto laden entdecken Schema

val df1With_ = df.toDF(df.columns.map(_.replace(".", "_")): _*) 
val column_to_keep = df1With_.columns.filter(v => (!v.contains("^") && !v.contains("!") && !v.contains("_c"))).toSeq 
val df1result = df1With_.select(column_to_keep.head, column_to_keep.tail: _*) 

Dataset 2:

4295867927|^|860|^|CUS|^|External Revenue|^||^||^|REXR|^|False|^||^||^||^||^|False|^|False|^|CUS_REXR|^||^||^|505074|^|505074|^|505074|^|505074|^|505074|^||^|505074|^|True|^||^|3015250|^||^|I|!| 

ich schaffe einen Datenrahmen aus beiden und dann trete. Schließlich schreibe ich Ausgabe von beiden Datenrahmen in der CSV-Datei.

Hier ist der Code in die CSV-Datei schreiben.

val dfMainOutputFinal = dfMainOutput.select($"DataPartition", $"StatementTypeCode",concat_ws("|^|", dfMainOutput.schema.fieldNames.filter(_ != "DataPartition").map(c => col(c)): _*).as("concatenated")) 

val dfMainOutputFinalWithoutNull = dfMainOutputFinal.withColumn("concatenated", regexp_replace(dfMainOutputFinal.col_*, "null", "")).show() 

dfMainOutputFinal.write.partitionBy("DataPartition","StatementTypeCode") 
    .format("csv") 
    .option("nullValue", "") 
    .option("codec", "gzip") 
    .save("s3://trfsdisu/SPARK/FinancialLineItem/output") 

Alle arbeiten außer .option("nullValue", "") in Ordnung. Ich kann NULL nicht durch einen leeren Wert ersetzen.

In meiner Ausgabe sehe ich immer noch die Null-Werte.

Ich habe dies auch versucht, aber das gleiche Ergebnis erhalten.

val newDf = df.na.fill("e",Seq("blank")) 
+1

Sind Sie sicher, dass die Datensätze tatsächlich * nulls * und nicht die Zeichenfolgen enthalten "Null"? – Shaido

+0

also ersetzt es nur null nicht "null"? Was passiert, wenn ich null string ... – SUDARSHAN

+0

Eine Zeichenfolge, die * null * ist, ist in Ordnung, aber wenn Sie eine Zeichenfolge mit den Buchstaben "null" haben, wird es als eine normale Zeichenfolge behandelt. – Shaido

Antwort

2

ich den Verdacht, dass der Datenrahmen tatsächlich nulls, nicht enthält, sondern dass sie Strings mit den Buchstaben „null“. Wenn dies der Fall ist, können Sie einfach alle Instanzen von "null" durch "" ersetzen. Danach können Sie wie zuvor .option("nullValue", "") verwenden. Um die Zeichenfolge in Spalten zu ersetzen, ist es möglich, regexp_replace(column, "string to replace", "string to replace with") zu verwenden. kleines Beispiel S:

val df = Seq("a", "null", "c", "b").toDF("col1") 
val df2 = df.withColumn("col1", regexp_replace(col("col1"), "null", "")) 

Hier ist die „Null“ wurde mit „“ ersetzt, wie wollte, sieht die letzte Datenrahmen wie folgt aus:

+----+ 
|col1| 
+----+ 
| a| 
| | 
| c| 
| b| 
+----+ 
+0

Si in meinem Fall muss ich dies für alle Spalten tun? Kann ich es tun, bevor Sie in CSV-Datei schreiben? – SUDARSHAN

+0

@SUDARSHAN Ja, Sie müssen dies für alle Spalten tun, bevor Sie die CSV-Datei schreiben. – Shaido

+0

Dann ändert sich wieder Schema und ich habe Probleme beim Schreiben von Partitionsdateien – SUDARSHAN

Verwandte Themen