【发布时间】:2021-09-10 15:02:56
【问题描述】:
我有以下df:
KSCHL01 VTEXT01 KWERT01 KSCHL02 VTEXT02 KWERT02 KSCHL03 VTEXT03 KWERT03 id
ZBTB Tarif de base 4455.00 ZBFA Brut facturé 4455.00 ZBN Brut Négocié 3645.00 1
ZBT Brut Tarif. 222.75 ZFIF Remises fin d'ordre 0.00 ZMAJ Majorations 0.00 2
我可能有超过 13 列。 我想将每 3 列切片转换为一行,以获得此预期输出:
id KSCHL VTEXT KWERT
1 ZBTB Tarif de base 4455.00
1 ZBFA Brut facturé 4455.00
1 ZBN Brut Négocié 3645.00
2 ZBT Brut Tarif. 222.75
2 ZFIF Remises fin d'ordre 0.00
2 ZMAJ Majorations 0.00
我这样做了:
for( i <- 0 to df.columns.length-4 by 3){
var temp=df.select(df.columns.slice(i, i+3).map(col(_)): _*)
val columns = temp.columns
val regex = """[0-9]"""
val replacingColumns = columns.map(regex.r.replaceAllIn(_, "")) # delete all digits in column names
val resultDF = replacingColumns.zip(columns).foldLeft(temp){(tempdf, name) => tempdf.withColumnRenamed(name._2, name._1)}
res=res.union(resultDF) # Append df to final DF
}
这给了我这个:
KSCHL VTEXT KWERT
ZBTB Tarif de base 4455.00
ZBFA Brut facturé 4455.00
ZBN Brut Négocié 3645.00
ZBT Brut Tarif. 222.75
ZFIF Remises fin d'ordre 0.00
ZMAJ Majorations 0.00
如何将 id 列添加到每个切片中,以便将其作为所需输出中的列?我试过了:
temp = temp.withColumn("id", df.id)
但我遇到了这个错误:
error: value id in class Dataset cannot be accessed in org.apache.spark.sql.DataFrame
谢谢。
【问题讨论】:
-
哈哈,可以添加异常输出吗?
-
第二块是我的预期输出,抱歉不是很清楚
-
如果您的数据框不包含相同数量的列,例如
KSCHL01、KSCHL02列和KSCHL03丢失怎么办? -
这不可能发生。
标签: scala dataframe apache-spark slice