在 Spark Scala 中,如何检查数据框列中的字符串中有多少字符是大写的?

In Spark Scala, how to check how many characters in a string in a dataframe column are uppercase?

我在 Databricks 上使用 Spark Scala。我有一个带有一列的数据框,该列中的所有值都是字符串。我想创建另一列,其中包含原始列中大写字母的数量。一个例子是这样的:

val df = Seq(("Java",1), ("2000",0), ("python",0), ("ScAlA",3), ("AuguST/Car",4)).toDF("list", "qty_uppercase")

给出:

我不知道该怎么做。

我尝试使用以下命令拆分“列表”列中的字符串:

.withColumn("list_split", split($"list",""))

结果如下。但是后来我找不到正确的方法来遍历新列的每个字符。

例如,我已经尝试过其他问题中提到的方法,并使用 exists 创建一个列,但它不起作用:

>>> .withColumn("count", $"list".exists(_.isUpper))

>>> error: value exists is not a member of org.apache.spark.sql.ColumnName
.withColumn("qty", $"list".exists(_.isUpper))

一种方法是仅按 upper-case 个字母拆分并计算拆分次数:

val df = Seq(("Java",1), ("2000",0), ("python",0), ("ScAlA",3), ("AuguST/Car",4)).toDF("list", "qty_uppercase")
df.withColumn("count", size(split($"list", "[A-Z]")) - 1).show()

符合预期计数:

+----------+-------------+-----+
|      list|qty_uppercase|count|
+----------+-------------+-----+
|      Java|            1|    1|
|      2000|            0|    0|
|    python|            0|    0|
|     ScAlA|            3|    3|
|AuguST/Car|            4|    4|
+----------+-------------+-----+