Sid*_*idd 1 apache-spark apache-spark-sql pyspark
专家们,我有一个简单的要求,但无法找到实现目标的功能。
我正在使用 pyspark (spark 1.6 和 Python 2.7)并有一个简单的 pyspark 数据框列,其中包含某些值,例如-
1849adb0-gfhe6543-bduyre763ryi-hjdsgf87qwefdb-78a9f4811265_ABC
1849adb0-rdty4545y4-657u5h556-zsdcafdqwddqdas-78a9f4811265_1234
1849adb0-89o8iulk89o89-89876h5-432rebm787rrer-78a9f4811265_12345678
Run Code Online (Sandbox Code Playgroud)
这些值的共同点是有一个“下划线”,之后有某些字符(可以是任意数量的字符)。这些是我有兴趣在输出中获得的字符。我想使用子字符串或正则表达式函数,它将找到列值中“下划线”的位置,并选择“从下划线位置+1”直到列值的末尾。因此输出看起来像一个数据框,其值为-
ABC
1234
12345678
Run Code Online (Sandbox Code Playgroud)
我尝试使用子字符串,但可以找到任何内容来“索引”“下划线”
谢谢!
小智 5
无需使用任何正则表达式
请尝试如下所示。基本上在_ char 上拆分并通过getItem()获取第二项
>>> from pyspark.sql import functions as F
>>> my_list = [("1849adb0-gfhe6543-bduyre763ryi-hjdsgf87qwefdb-78a9f4811265_ABC",),("1849adb0-rdty4545y4-657u5h556-zsdcafdqwddqdas-78a9f4811265_1234",),("1849adb0-89o8iulk89o89-89876h5-432rebm787rrer-78a9f4811265_12345678",)]
>>> my_df = spark.createDataFrame(my_list, schema=["input_v"])
>>> my_df.withColumn("get_val", F.split(F.col("input_v"),"_").getItem(1)).show(20,False)
Run Code Online (Sandbox Code Playgroud)
结果
+-------------------------------------------------------------------+--------+
|input_v |get_val |
+-------------------------------------------------------------------+--------+
|1849adb0-gfhe6543-bduyre763ryi-hjdsgf87qwefdb-78a9f4811265_ABC |ABC |
|1849adb0-rdty4545y4-657u5h556-zsdcafdqwddqdas-78a9f4811265_1234 |1234 |
|1849adb0-89o8iulk89o89-89876h5-432rebm787rrer-78a9f4811265_12345678|12345678|
+-------------------------------------------------------------------+--------+```
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8548 次 |
| 最近记录: |