Regex 如何找到有数字的字符串

Regex 如何找到有数字的字符串,regex,apache-spark,hive,Regex,Apache Spark,Hive,我想用spark查找有数字的字符串 Example : String = "abc def ghi2 xyz4" Answer : ghi2 xyz4 输出 +---+---------+ | id| value| +---+---------+ | 0|ghi2 xyz4| | 1| 0d2 234| +---+---------+ 或使用RDD: Seq("abc def ghi2 xyz4","0d2 234 AXZ Mxei").toDF().rdd.map(s=>

我想用spark查找有数字的字符串

Example : String = "abc def ghi2 xyz4"
Answer : ghi2 xyz4
输出

+---+---------+
| id|    value|
+---+---------+
|  0|ghi2 xyz4|
|  1|  0d2 234|
+---+---------+
或使用RDD:

Seq("abc def ghi2 xyz4","0d2 234 AXZ Mxei").toDF().rdd.map(s=>s.getString(0).split(" ").filter(s=>s.matches(".*\\d.*")))
  • 将输入拆分为Seq
  • 使用regex+
    rlike
    函数添加where子句以检查数字
  • 映射到字符串
    .Map(row=>row.getString(0))
  • 连接并输出字符串

  • 蜂巢还是火花?请选择。您是指字符串中至少有一个数字字符的单词吗?世界上任何地方?或者具体到最后?蓝色幻影:有多少位数还是只有一位数spark@DannyStaple它可以在任何地方,也可以在下面的stringanswer中有更多的数字。你能给出简单的答案吗。这就是Spark的工作原理。@NaveenGupta我添加了RDD解决方案。RDD令人惊讶地非常简短和简单。感谢您为什么使用getString(0)。他到底在做什么。我已经检查过了,但仅仅将df转换为数据集并没有任何区别。
    Seq("abc def ghi2 xyz4","0d2 234 AXZ Mxei").toDF().rdd.map(s=>s.getString(0).split(" ").filter(s=>s.matches(".*\\d.*")))
    
    import org.apache.spark.sql.functions._
    
    object CheckDigitInString {
    
      def main(args: Array[String]): Unit = {
        val input = "abc def ghi2 xyz4"
        val spark = Constant.getSparkSess
        import spark.implicits._
        val inputDf = input.split(" ").toSeq.toDF
    
        val output = inputDf.where(col("value").rlike(".*[0-9]+.*"))
          .map(row => row.getString(0))
          .collect().mkString(" ")
        println(output)
      }
    
    }