【问题标题】:Applying a function on every member of an Array in Spark Scala在 Spark Scala 中对数组的每个成员应用函数
【发布时间】:2021-04-24 02:50:43
【问题描述】:

我在数据框中有一列是字符串数据类型的数组。我需要提取字符串的一部分,因此我需要对数组的每个元素应用正则表达式。 所以我想使用 scala Dataframe API 来应用它。

regexp_extract($"myString","(\\d+)-(\\d+)",1).cast(LongType) 

在数组的每个成员上。

在一个字符串上做很简单,但是如何在数组的每一项上做呢?

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    您可以使用transform 将函数应用于每个数组元素:

    val df2 = df.withColumn(
        "myString", 
        expr("transform(myString, x -> cast(regexp_extract(x, '(\\\\d+)-(\\\\d+)',1) as bigint))")
    )
    

    【讨论】:

    • 您能解释一下transform 函数的工作原理以及它在Spark 中的定义位置吗?
    • 感谢您的链接。我只是认为这可能是一种避免使用字符串表达式的方法。但看起来transform 函数仅在 Spark 3.0 中引入。因此,使用 Spark 3.0 可以在 Scala 中编写相同的代码:df.withColumn("myString", transform(col("myString"), (x: Column) => regexp_extract(x,"(\\d+)-(\\d+)",1).cast(LongType)))
    猜你喜欢
    • 2011-12-30
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多