2017-10-09 3 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 파일에 출력을 쓰는 데이터 프레임을 만든다.

최종 데이터 프레임은 내가로만 concatenated 예상되는 내 헤더를 참조 내 출력 파일에 지금이

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

의 헤더로 내 최종 출력의 헤더를 변경 어쨌든입니다. 열 이름이 이미 column_to_keep 변수에 존재하는 한, 당신은 간단하게 수행 할 수 있습니다

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

이 발생합니다이 때문에, 매우 긴 열 이름, 그것은에 저장하는 것보다 뭔가 다른 있었다면 내가 조언을하지 않을 a csv.

+0

안녕하세요 Shaido 헤더의 마지막 열에'| '를 써야한다면 어떻게해야할까요? – SUDARSHAN

+0

그래서 내 헤더 마지막 열은 다음과 같이 보일 것입니다. 'FFAction |^|!' – SUDARSHAN

+0

@SUDARSHAN은'mkString ("|^|")'을'mkString (" , "|^|", "|")'. – Shaido