【问题标题】:strip numbers from pyspark dataframe column of type string从字符串类型的pyspark数据框列中去除数字
【发布时间】:2017-04-15 12:20:30
【问题描述】:

我正在处理 pyspark 中的数据框。我有数据框 df 和列 col_1 ,它是数组类型并且也包含数字。

是否有内置函数可以从此字符串中删除数字?

数据框架构:

>>> df.printSchema()
root
 |-- col_1: array (nullable = true)
 |    |-- element: string (containsNull = true)

列中的示例值:

>>>df.select("col_1").show(2,truncate=False)

+-------------------------------------------------------------------------------+
|col_1                                                                                                                                   
+-------------------------------------------------------------------------------+
|[use, bal, trans, ck, pay, billor, trans, cc, balances, got, grat, thnxs]                                                                  |
|[hello, like, farther, lower, apr, 11, 49, thank]|
+-------------------------------------------------------------------------------+

在这种情况下,我正在寻找可以从第二行去除数字 11、49 的函数。谢谢你。

【问题讨论】:

    标签: python numbers pyspark strip pyspark-sql


    【解决方案1】:

    这里有一些你可以尝试的 -

    # Data preparation => 
    data = [[['use', 'bal', 'trans', 'ck', 'pay', 'billor', 'trans', 'cc', 'balances', 'got', 'grat', 'thnxs']],
            [['hello', 'like', 'farther', 'lower', 'apr', '11', '49', 'thank']]]
    
    df = sc.parallelize(data).toDF(["arr"])
    df.printSchema()
    

    root
     |-- arr: array (nullable = true)
     |    |-- element: string (containsNull = true)
    

    from pyspark.sql.functions import explode,regexp_extract,col
    
    df.select(explode(df.arr).alias('elements'))\
      .select(regexp_extract('elements','\d+',0)\
      .alias('Numbers'))\
      .filter(col('Numbers') != '').show()
    

    输出:

    +-------+
    |Numbers|
    +-------+
    |     11|
    |     49|
    +-------+
    

    【讨论】:

    • 那行得通。我正在度假,无法测试它。效果很好。
    • 快速子问题:在我最初的问题中,是去除数字并仅保留章程。我正在寻找保留所有字符的语法,以便我的输出将是除数字之外的所有输入字符串。你知道在 regexp_extract 中定义所有字符集的语法吗?
    • 正则表达式查找除数字以外的任何内容将是 \D+
    • 好的,但我正在寻找过滤章程 [a 到 z] 的语法。
    • 仅保留章程:select(regexp_extract('elements','[a-zA-Z]+', 0))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 2016-05-11
    • 1970-01-01
    • 2017-09-09
    • 2018-10-21
    相关资源
    最近更新 更多