从字符串类型的pyspark dataframe列中剥离数字

时间:2017-04-12 18:50:17

标签: python numbers pyspark strip pyspark-sql

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

是否有内置函数来删除此字符串中的数字?

Dataframe架构:

>>> 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号的功能。谢谢。

1 个答案:

答案 0 :(得分:2)

这是你可以尝试的东西 -

# 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|
+-------+