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"))
Sind Sie sicher, dass die Datensätze tatsächlich * nulls * und nicht die Zeichenfolgen enthalten "Null"? – Shaido
also ersetzt es nur null nicht "null"? Was passiert, wenn ich null string ... – SUDARSHAN
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