使用 Spark Scala 进行字符串操作

student_R123

我有以下 Spark scala 数据框。

val someDF = Seq(
  (1, "bat",1.3222),
  (4, "cbat",1.40222),
  (3, "horse",1.501212)
).toDF("number", "word","value")

我创建了一个用户定义函数 (UDF) 来创建一个新变量,如下所示:

逻辑:如果单词等于 bat,则值否则为零。

  import org.apache.spark.sql.functions.{col}
    val func1 = udf( (s:String ,y:Double) => if(s.contains("bat")) y else 0 )
    func1(col("word"),col("value"))

+------+-----+-------+
|number| word|cal_var|
+------+-----+-------+
|     1|  bat| 1.3222|
|     4| cbat|1.40222|
|     3|horse|    0.0|
+------+-----+-------+

在这里检查我使用contains函数的相等性。因此,我得到了不正确的输出。我想要的输出应该是这样的:

+------+-----+-------+
|number| word|cal_var|
+------+-----+-------+
|     1|  bat| 1.3222|
|     4| cbat|    0.0|
|     3|horse|    0.0|
+------+-----+-------+

谁能帮我找出我应该用来检查相等性的正确字符串函数吗?

谢谢

阿南德赛

解决方案是使用equalsmethod 而不是contains. contains检查字符串bat是否存在于给定字符串中的任何位置,s而不是相等。代码如下所示:

scala> someDF.show
+------+-----+--------+
|number| word|   value|
+------+-----+--------+
|     1|  bat|  1.3222|
|     4| cbat| 1.40222|
|     3|horse|1.501212|
+------+-----+--------+


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

scala> val func1 = udf( (s:String ,y:Double) => if(s.equals("bat")) y else 0 )
func1: org.apache.spark.sql.expressions.UserDefinedFunction = UserDefinedFunction(<function2>,DoubleType,Some(List(StringType, DoubleType)))

scala> someDF.withColumn("col_var", func1(col("word"),col("value"))).drop("value").show
+------+-----+-------+
|number| word|col_var|
+------+-----+-------+
|     1|  bat| 1.3222|
|     4| cbat|    0.0|
|     3|horse|    0.0|
+------+-----+-------+

让我知道它是否有帮助!!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Scala在Apache Spark中拆分字符串

在 Spark 上使用 Scala 拆分 Dataframe 中的字符串

Scala,Spark,提取部分字符串

Spark Scala 字符串匹配 UDF

如何使用 Spark scala 从字符串格式的复杂 JSON 创建数据帧

如何使用scala在Apache spark中用空字符串(“”)替换空值

使用Spark Scala数据帧中JSON字符串的正则表达式

在Spark Scala中使用blob元素编写字符串的JSON数组

展平任何嵌套的json字符串,并使用spark scala转换为dataframe

输入类型必须是字符串类型,但使用Scala在Spark中出现ArrayType(StringType,true)错误

使用scala在spark中拆分由逗号和空格分隔的字符串

如何使用scala将csv字符串解析为Spark数据帧?

在 Scala Spark 流中使用 foreach 时不希望字符串作为类型?

在Scala中使用'=='而不是等于进行字符串比较

使用 Spark Scala 进行表数据转换

使用Scala进行Spark mllib分类

使用R进行字符串操作

使用 Linq 进行字符串操作

使用Scala Iterator使用RegEx匹配将大数据流(从字符串)分解为多个块,然后对这些块进行操作?

如何使用scala通过spark中的一个或多个字符串参数传递selectExpr中的列名?

提取操作(...); 使用REGEX从字符串进行子操作

Spark Scala - 字符串到时间戳

Scala Spark:将 SQL 字符串解析为列

Spark Scala中的自定义字符串

scala / spark映射[String,List [String]]到字符串对

(Scala)在Apache Spark中将字符串转换为日期

将字符串转换为BigInt DataFrame Spark Scala

在 spark scala 中将字符串拆分为单词

Spark Scala - 拆分字符串语法问题