使用apachesparkjava从列内容中提取特定字符串

ux6nzvsh  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(278)

我的数据框中有以下列:

+--------------------------------------------------------------------+
|          _classname                                                |
+--------------------------------------------------------------------+
|de.abs.org.vertrag.util.test.Elementofthetable                      |
|de.abs.org.vertrag.util.test.classes.Apachesparkproject             |
+--------------------------------------------------------------------+

我想得到预期的Dataframe:

+--------------------------------------------------------------------+
|           _classname                                               |
+--------------------------------------------------------------------+
|de.abs.org.vertrag.util.test                                        |
|de.abs.org.vertrag.util.test.classes                                |
+--------------------------------------------------------------------+

我想去掉最后一个(.)后面的每个包的类名,这是我的代码:

teamNamesDf = teamNamesDf.select(col("_classname"), substring_index(col("_classname"), ".\\[^A-Z]+", -1).as("testSuiteName"));

这对我不起作用:(有人知道如何使用apachesparkjava吗?

9bfwbjaz

9bfwbjaz1#

你可以试试这个正则表达式,它在最后一个 . :

Dataset<Row> result = df.select(regexp_extract(col("_classname"), "^(.*)\\.[^\\.]*$", 1))

另一种方法是使用 substring_index 长度可变,取决于 . 在字符串中:

Dataset<Row> result = df.selectExpr("substring_index(_classname, '.', size(split(_classname, '\\\\.')) - 1)")

相关问题