第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Array 上使用

如何在 Array 上使用

翻閱古今 2022-06-22 15:49:54
我有一個 pyspark 數(shù)據(jù)框,它包含 4 列。我想從一列中提取一些字符串,它的類型是Array of strings. 我使用regexp_extract了函數(shù),但它返回了一個錯誤,因為regexp_extract它只接受一個字符串。示例數(shù)據(jù)框:id |  last_name | age | Identificator------------------------------------------------------------------12 | AA         | 23  |  "[""AZE","POI","76759","T86420","ADAPT"]"------------------------------------------------------------------24 | BB         | 24  | "[""SDN","34","35","AZE","21054","20126"]"------------------------------------------------------------------我想提取所有數(shù)字:- contain 4, 5 or 6 digits - it should not attached to a letters. - if attached to letter Z ok, I should extract it. - save it in a new column in my Dataframe.我開始這樣做,但它不起作用,因為標(biāo)題是一個字符串?dāng)?shù)組。expression = r'([0-9]){4,6}' df = df.withColumn("extract", F.regexp_extract(F.col("Identificator"), expression, 1))如何使用 regexp_extract 或其他解決方案提取這些數(shù)字?謝謝
查看完整描述

1 回答

?
蠱毒傳說

TA貢獻(xiàn)1895條經(jīng)驗 獲得超3個贊

以下是我可以使用 SparkSQL 2.4.0+內(nèi)置函數(shù)過濾器執(zhí)行的操作:


from pyspark.sql.functions import expr


df.withColumn('text_new', expr('filter(text, x -> x rlike "^Z?[0-9]{4,6}$")')) \

  .show(truncate=False)                                                                          

#+-----------------------------------+---------------------+

#|text                               |text_new             |

#+-----------------------------------+---------------------+

#|[AZE, POI, 76759, T86420, ADAPT]   |[76759]              |

#|[SDN, 34, Z8735, AZE, 21054, 20126]|[Z8735, 21054, 20126]|

#+-----------------------------------+---------------------+

結(jié)果是一個包含匹配項的數(shù)組。正則表達(dá)式^Z?[0-9]{4,6}$匹配 4-6 位可選地前面有字符“Z”的數(shù)字。


編輯:對于舊版本的 Apache Spark,使用udf():


import re

from pyspark.sql.functions import udf

from pyspark.sql.types import ArrayType, StringType


# regex pattern:

ptn = re.compile('^Z?[0-9]{4,6}$')


# create an udf to filter array

array_filter = udf(lambda arr: [ x for x in arr if re.match(ptn, x) ] if type(arr) is list else arr, ArrayType(StringType()))


df.withColumn('text_new', array_filter('text')) \

  .show(truncate=False)

Edit-2:根據(jù)您的評論,從 'Z' 到 'MOD' 并刪除前導(dǎo)MOD,使用 lstrip() 刪除此子字符串。調(diào)整以下:


ptn = re.complie(r'^(?:MOD)?[0-9]{4,6}$')


array_filter = udf(lambda arr: [ x.lstrip('MOD') for x in arr if re.match(ptn, x) ] if type(arr) is list else arr, ArrayType(StringType()))



查看完整回答
反對 回復(fù) 2022-06-22
  • 1 回答
  • 0 關(guān)注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號