2017-04-12 51 views
0

我正在pyspark中處理數據幀。我有dataframe df和column col_1,它是數組類型,並且包含數字。字符串類型的pyspark數據框列的條形碼

是否有內置函數來刪除此字符串中的數字?

數據幀模式:在列

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

這裏是你可以嘗試 -

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

感謝,讓我試着回到你身邊。 – user2763088

+0

工作。我正在度假,無法測試它。它運行良好。 – user2763088

+0

快速小問題:在我原來的問題是剝去數字,只保留包機。我找到了保留所有字符的語法,這樣我的輸出將是除數字之外的所有輸入字符串。你知道語法來定義regexp_extract中的所有字符集嗎? – user2763088

相關問題