如何查找pyspark数据框的特定列是否包含数值

时间:2019-05-03 08:34:40

标签: python-3.x apache-spark pyspark apache-spark-sql

我正在使用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     |
    +------------------------------------------------+-------------+-------------+

我使用了子字符串,但是数值的位置可能会改变。你能帮忙吗?

1 个答案:

答案 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|
+--------------------+------+------+