输入数据框::
1 | 1 abc真棒
2 | abc 2你太棒了
58 | xyz,您太棒了58
预期的输出数据框::
1 | abc,您真棒
2 | abc,您很棒
58 | xyz,您很棒!
基本上想从“名称”列中删除“列号”的值。它可以在任何时间和任何地点。
答案 0 :(得分:0)
您可以使用子字符串。
例如。您的abc 1列可能是:
yourdataframename.withColumn("your_new_column_name" , substring($"abc_1_column_name" , 1, 3)).drop("abc_1_column_name")
答案 1 :(得分:0)
您的示例看起来像您正在尝试映射数据框的值,但是如果您确实如您所说的“想要从列名中删除列号的值”,那么您可以遍历所有列并重命名每个列因此(在Java中):
for (String col : df.columns()) {
df = df.withColumnRenamed(col, col.replaceAll("[^A-Za-z]",""));
}
如果您要从整个数据集中删除数字,则必须map
每行:
String[] columns = df.columns();
df = df.map(row -> {
String[] newValues = new String[columns.length];
for (int i = 0; i < columns.length; i++) {
newValues[i] = row.getString(i).replaceAll("[^A-Za-z]","");
}
return RowFactory.create(newValues);
}, RowEncoder.apply(df.schema()));
答案 2 :(得分:0)
您可以尝试一下,
val removeNumber=udf((s:String,n:Int)=>{s.replaceAll(n.toString, " "); })
df=df.withColumn(col("columnName"),removeNumber(col("oldColumnName"),col("firstColumn")).drop("oldColumnName")