我正在使用pyspark进行数据转换。下面是包含一些字母数字字符的数据框。
+------------------------------------------------+
|Part1 |
+------------------------------------------------+
|1 HKY TBT TPP 190326 115346 5 C |
|51 HKK ABB TYR B 190326 000526 13 C |
+------------------------------------------------+
我想从列中提取第二和第三整数值。以下是我所需的数据框
+------------------------------------------------+-------------+-------------+
|Part1 | Part2 | Part3 |
+------------------------------------------------+-------------+-------------+
|1 HKY TBT TPP 190326 115346 5 C | 190326 | 115346 |
|51 HKK ABB TYR B 190327 000526 13 C | 190327 | 000526 |
+------------------------------------------------+-------------+-------------+
我使用了子字符串,但是数值的位置可能会改变。你能帮忙吗?
答案 0 :(得分:0)
您可以使用regexp_extract
df = spark_session.createDataFrame([
Row(Part1 = "1 HKY TBT TPP 190326 115346 5 C"),
Row(Part1 = "51 HKK ABB TYR B 190326 000526 13 C")
])
regex = r'^(\d+)\s[^\d]*(\d+)\s[^\d]*(\d+)'
df.withColumn("Part2", regexp_extract(col("Part1"), regex, 2))\
.withColumn("Part3", regexp_extract(col("Part1"), regex, 3))\
.show()
输出:
+--------------------+------+------+
| Part1| Part2| Part3|
+--------------------+------+------+
|1 HKY TBT TPP 190...|190326|115346|
|51 HKK ABB TYR B ...|190326|000526|
+--------------------+------+------+