当前位置: 首页 > 知识库问答 >
问题:

Spark dataframe Column-Scala中特定字符串后的数字提取

越文康
2023-03-14

我有一个dataframedf,格式如下

 |constraint                                     |constraint_status |constraint_msg                                                                                             
 +----------------------------------------------------------------------------------------------------------------+--------------------------------+
 |CompletenessConstraint                        |Success          |Value: 1.0 Notnull condition should be satisfied     
 |UniquenessConstraint                          |Success          |Value: 1.0 Uniqueness condition should be satisfied                            |
 |PatternMatchConstraint                        |Failure          |Expected type of column CHD_ACCOUNT_NUMBER to be StringType                          |
 |MinimumConstraint                             |Success          |Value: 5.1210650000005 Minimum value should be greater than 10.000000 
 |HistogramConstraint                           |Failure          |Can't execute the assertion: key not found: 1242.0!Percentage should be greater than 10.000000|

我希望在value:字符串之后获得数值,并创建一个新列value

 |constraint                                     |constraint_status |constraint_msg                                                       |Value                                        
 +----------------------------------------------------------------------------------------------------------------+--------------------------------+
 |CompletenessConstraint                        |Success          |Value: 1.0 Notnull condition should be satisfied                          |     1.0
 |UniquenessConstraint                          |Success          |Value: 1.0 Uniqueness condition should be satisfied                       |     1.0 
 |PatternMatchConstraint                        |Failure          |Expected type of column CHD_ACCOUNT_NUMBER to be StringType               |     null
 |MinimumConstraint                             |Success          |Value: 5.1210650000005 Minimum value should be greater than 10.000000     |     5.1210650000005 
 |HistogramConstraint                           |Failure          |Can't execute the assertion: key not found: 1242.0!Percentage should be greater than 10.000000| null  
      df = df.withColumn("Value",split(df("constraint_msg"), "Value\\: (\\d+)").getItem(0))

org.apache.spark.sql.analysisException:由于数据类型不匹配,无法解析“split(constraint_msg,'value\:(\d+)”)“:参数1要求字符串类型,但是”constraint_msg“是数组类型。;;

共有1个答案

戚阳文
2023-03-14

When..否则将帮助您首先筛选那些不包含值的记录:。假设constraint_msg总是以值:开头,我将在split之后选择第二个元素作为所需的值。

val df = sc.parallelize(Seq(("CompletenessConstraint", "Success", "Value: 1.0 Notnull condition should be satisfied"), ("PatternMatchConstraint", "Failure", "Expected type of column CHD_ACCOUNT_NUMBER to be StringType"))).toDF("constraint", "constraint_status", "constraint_msg")

val df1 = df.withColumn("Value",when(col("constraint_msg").contains("Value:"),split(df("constraint_msg"), " ").getItem(1)).otherwise(null))

df1.show()
+--------------------+-----------------+--------------------+-----+
|          constraint|constraint_status|      constraint_msg|Value|
+--------------------+-----------------+--------------------+-----+
|CompletenessConst...|          Success|Value: 1.0 Notnul...|  1.0|
|PatternMatchConst...|          Failure|Expected type of ...| null|
+--------------------+-----------------+--------------------+-----+
 类似资料:
  • 我有一个字符串: 我想从中提取,即从右边的最后一个或第一个之后的子字符串。 有人能提供一些帮助吗?

  • 问题内容: 我有一个像这样的数组: 我要做的是删除“苹果”。 我的问题很基本,但是,我搜索了网站,发现java并不真正支持从数组中删除功能。我还听说过使用Java Utils,因为删除项目非常简单…。我试图在Google上找到Java Utils,但是几乎所有链接都消失了。 所以最后…有什么方法可以从字符串数组中删除字符串? 即使我使用ArrayList,也找不到在其中生成随机项的方法!例如:在普

  • 我有一个Scala数据框,它有以下模式: 和数据样本: 我想从这个数组字符串中提取值,其中元素以say SD开头并获取值,然后如果其操作系统获取值。问题是数组字符串中的位置不总是相同的,它不断变化,因此我无法使用 输出应为我提供一个数据帧:

  • 问题内容: 与该方法等效的 JavaScript 是什么: C#仅在字符串的 开头 和 结尾 处修剪所选字符! 问题答案: 一行就足够了: 在功能上:

  • 我得到以下字符串: 我想从里面拿走食物和饮料。 我尝试了以下代码: 但它给人的感觉是,食物很刺激,喝了很多,离食物很近,三个和四个。