首页 > 解决方案 > 在删除最后一个特殊字符的数据框 java 上应用函数或操作

问题描述

我有数据进入数据框的第一列“代码”,如下所示

'101-23','23-00-11','NOV-11-23','34-000-1111-1'

现在我想在子字符串之后为“代码”列设置如下值。

101,23-00,NOV-11,34-000-1111

以上可以通过java代码轻松实现,如下所示

String str ="23-00-11";    
int index=str.lastindex("-");
String ss=str.substring(0,index);

这使

'23-00'

如何处理数据框并使用 spark 1.6.2 java 1.8 编写 udf 或应用于数据框?
我试过df.withcolumn("code",substring("code",0,1))但没有找到找到最后一个索引的方法。请帮忙。

标签: javadataframeapache-spark-sql

解决方案


   from pyspark.sql.functions import *
      newDf = df.withColumn('_c0', regexp_replace('_c0', '@', ''))\
      .withColumn('_c1', regexp_replace('_c1', "'", ''))\
      .withColumn('_c2', regexp_replace('_c2', '!', ''))

    newDf.show()

更新

import org.apache.spark.sql.functions._

val df11 = Seq("'101-23','23-00-11','NOV-11-23','34-000-1111-1'").toDS()

df11.show()

//df11.select(col("a"), substring_index(col("value"), ",", 1).as("b"))
val df111=df11.withColumn("value", substring(df11("value"), 0, 10))
df111.show()

结果 :

+--------------------+
|               value|
+--------------------+
|'101-23','23-00-1...|
+--------------------+

+----------+
|     value|
+----------+
|'101-23','|
+----------+

import org.apache.spark.sql.functions._
df11: org.apache.spark.sql.Dataset[String] = [value: string]
df111: org.apache.spark.sql.DataFrame = [value: string]

推荐阅读