私はすべてのフィールドに連結するデータフレームを持っています。spark csvデータフレームの列を削除する
連結後、別のデータフレームになり、最終的にその出力を2つの列に分割されたcsvファイルに書き出します。その列の1つが、最終出力に含めたくない最初のデータフレームに存在します。ここで
私のコードです:
val dfMainOutput = df1resultFinal.join(latestForEachKey, Seq("LineItem_organizationId", "LineItem_lineItemId"), "outer")
.select($"LineItem_organizationId", $"LineItem_lineItemId",
when($"DataPartition_1".isNotNull, $"DataPartition_1").otherwise($"DataPartition".cast(DataTypes.StringType)).as("DataPartition"),
when($"StatementTypeCode_1".isNotNull, $"StatementTypeCode_1").otherwise($"StatementTypeCode").as("StatementTypeCode"),
when($"FFAction_1".isNotNull, concat(col("FFAction_1"), lit("|!|"))).otherwise(concat(col("FFAction"), lit("|!|"))).as("FFAction"))
.filter(!$"FFAction".contains("D"))
ここで私は別のデータフレームを連結して作成しています:
val dfMainOutputFinal = dfMainOutput.select($"DataPartition", $"StatementTypeCode",concat_ws("|^|", dfMainOutput.schema.fieldNames.map(c => col(c)): _*).as("concatenated"))
これは私が今私がいけない
dfMainOutputFinal
.drop("DataPartition")
.write
.partitionBy("DataPartition","StatementTypeCode")
.format("csv")
.option("header","true")
.option("encoding", "\ufeff")
.option("codec", "gzip")
.save("path to csv")
を試してみましたが、何であるDataPartition私の出力の列。
私はDataPartitionに基づいてパーティションを作成していますが、DataPartitionはメインデータフレームに存在するため、出力に表示されています。
QUESTION 1:はQUESTION 2
DATAFRAME
から列を無視することができます方法:は、私のエンコード形式はUTFになりますように、私の実際のデータを書き込む前に、CSV出力ファイルに"\ufeff"
を追加する方法はあります-8-BOM。
これは私が
val dfMainOutputFinal = dfMainOutput.select($"DataPartition", $"StatementTypeCode",concat_ws("|^|", dfMainOutput.schema.filter(_ != "DataPartition").fieldNames.map(c => col(c)): _*).as("concatenated"))
を試してみましたが、私は削除する必要がある場合、エラー以下
<console>:238: error: value fieldNames is not a member of Seq[org.apache.spark.sql.types.StructField]
val dfMainOutputFinal = dfMainOutput.select($"DataPartition", $"StatementTypeCode",concat_ws("|^|", dfMainOutput.schema.filter(_ != "DataPartition").fieldNames.map(c => col(c)): _*).as("concatenated"))
の下に得ることが問題でてきたものである提案答え
を1として最終出力の2列
val dfMainOutputFinal = dfMainOutput.select($"DataPartition","PartitionYear",concat_ws("|^|", dfMainOutput.schema.fieldNames.filter(_ != "DataPartition","PartitionYear").map(c => col(c)): _*).as("concatenated"))
UTF-BOMが動作していません –
私はちょうど列を選択したくありません、私は第2データフレームが派生した最初のデータフレームに基づいてパーティションを作成したい –