2017-10-09 46 views
0

我有一个数据集,它看起来像这样如何用另一个数据帧头更改数据帧的标题?

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|!| 

这也是我如何装载有自动数据发现模式

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: _*) 

现在,我有我做连接操作和最后的另一个数据帧我创建了一个将输出写入csv文件的数据框。

最终数据帧看起来像这样

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(col("concatenated"), "null", "")) 

dfMainOutputFinalWithoutNull.write.partitionBy("DataPartition","StatementTypeCode") 
    .format("csv") 
    .option("nullValue", "") 
    .option("header","true") 
    .option("codec", "gzip") 
    .save("output") 

现在在我的输出文件我仅concatenated预计看到我的头。现在

我的问题是反正是有改变我为df1result数据帧

回答

1

的头部最终输出的头,我相信要解决这将是重命名concatenated列的最简单方法。由于列名已经在column_to_keep变量存在,你可以简单地做:

val header = column_to_keep.mkString("|^|") 
val dfMainOutputFinalWithoutNull = dfMainOutputFinal 
    .withColumn("concatenated", regexp_replace(col("concatenated"), "null", "")) 
    .withColumnRenamed("concatenated", header) 

这将导致是一个非常长的列名,因此,我不会劝告它,如果它是比保存到别的东西一个csv。

+0

嗨Shaido如果我不得不在'最后一列'只为标题? – SUDARSHAN

+0

所以我的头部最后一列应该看起来像这个'FFAction |!|'但是现在我变得像'FFAction |^|!' – SUDARSHAN

+0

@SUDARSHAN改变'mkString(“|^|”)''为'mkString(“” ,“|^|”,“|”)'。 – Shaido

相关问题