Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Scala Spark数据框中的列(名称)中删除特定值(列(编号))_Scala_Apache Spark_Dataframe - Fatal编程技术网

从Scala Spark数据框中的列(名称)中删除特定值(列(编号))

从Scala Spark数据框中的列(名称)中删除特定值(列(编号)),scala,apache-spark,dataframe,Scala,Apache Spark,Dataframe,输入数据帧:: 编号|名称 1 | 1 abc你太棒了 2 | abc 2你太棒了 58 | xyz你太棒了58 预期输出数据帧:: 编号|名称 1 | abc你太棒了 2 | abc你太棒了 58 | xyz你太棒了 基本上希望从列名中删除列编号的值。它可以在任何地方,任何时间 您可以使用子字符串 例如,对于您的abc 1专栏,可以是: yourdataframename.withColumn("your_new_column_name" , substring($"abc_1_column_

输入数据帧::

编号|名称 1 | 1 abc你太棒了

2 | abc 2你太棒了

58 | xyz你太棒了58

预期输出数据帧::

编号|名称 1 | abc你太棒了

2 | abc你太棒了

58 | xyz你太棒了


基本上希望从列名中删除列编号的值。它可以在任何地方,任何时间

您可以使用子字符串

例如,对于您的abc 1专栏,可以是:

yourdataframename.withColumn("your_new_column_name" , substring($"abc_1_column_name" , 1, 3)).drop("abc_1_column_name")

您的示例看起来像是在尝试映射数据帧的值,但是如果您确实想像您所说的那样从列名中删除列号的值,那么您可以遍历所有列并重命名每个列,就像在Java中那样:

for (String col : df.columns()) {
    df = df.withColumnRenamed(col, col.replaceAll("[^A-Za-z]",""));
}
如果试图从整个数据集中删除数字,则必须映射每一行:

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()));
你可以试试这个

val removeNumber=udf((s:String,n:Int)=>{s.replaceAll(n.toString, " "); })

df=df.withColumn(col("columnName"),removeNumber(col("oldColumnName"),col("firstColumn")).drop("oldColumnName")

你尝试过什么吗?是的,但我认为它不值得分享。你说你想从列名中删除列号的值,但在你的示例中,似乎你正在映射这些值?现在,清楚了吗?不,这不是我所期望的。查看已编辑的问题是否仅更改列名?你有多少列?您仍然可以使用withColumn和drop。我只有两栏,名字和号码。我想从列名中删除列号的值。这不是我要找的。好吧,你应该重新措辞你的问题,因为这就是你要问的。不,先生,这不是我要问的,我要问的是1。列名具有整数值,可以是任何2。我想从第二列名称中删除的特定整数值我只有两列,Name和Number。我想从列名中删除列号的值在这里我不想删除所有的数字,我只想删除列号中存在的特定数字使用列号替换的更新答案非常感谢奎师那: