【问题标题】:Compare substrings of different columns比较不同列的子串
【发布时间】:2023-01-09 22:46:13
【问题描述】:

我有一个这样的数据框:

+----------------------+--------------------------------------------------+-------------------+
| column_1             |column_2|                                         |Required_column    |
+----------------------+--------------------------------------------------+-------------------+
|K12B-45-84-6          |K12B-02-36-504, I05O-21-65-312, A301-21-25-363    | True              |
|J020-35-2-9           |P12K-05-31-602, M002-22-22-636,L630-51-32-544     | False             | 
|L006-85-00-694        |M10P-22-94-349,L006-85-00-694, I553-35-12-240     | True              |
|M002-22-36-989        |U985-12-45-363,    M002-19-14-964                 | True              |
+----------------------+--------------------------------------------------+-------------------+

解释:column_1 和 column_2 是一个字符串, 为了便于理解,我们将数据框中的值称为“开关”。 Column_1 每行始终只有一个开关值,但 column_2 可能有多个开关值。只有比较前 4 个字符串才能返回 True 或 False 值(例如:K12B == K12B 见第一行)

注意:即使 column_2 中的开关值是逗号分隔的,也从来没有共同的逻辑(有时可能有一个空格或两个空格等) 提示是 column_1 或 column_2 中的每个开关值都以字母开头,因此需要基于该提示的逻辑

目的是让所需的列返回 True 或 False,解决方案在 Pyspark 中是必需的

提前致谢

【问题讨论】:

    标签: dataframe apache-spark pyspark


    【解决方案1】:

    这是使用 Pyspark 的 substringcontains 函数的解决方案。这样,你就不用担心column_2的清洁问题,你只需要确保column_1被清洁即可:

    import pyspark.sql.functions as F
    
    data = [
        ("K12B-45-84-6", "K12B-02-36-504, I05O-21-65-312, A301-21-25-363"),
        ("J020-35-2-9", "P12K-05-31-602, M002-22-22-636,L630-51-32-544"),
        ("L006-85-00-694", "M10P-22-94-349,L006-85-00-694, I553-35-12-240"),
        ("M002-22-36-989", "U985-12-45-363,    M002-19-14-964")]
    
    columns = ["column_1", "column_2"]
    df = spark.createDataFrame(data = data, schema = columns)
    
    
    df = df.withColumn("Required_column", F.when(
                F.col("column_2").contains(F.substring(F.col("column_1"), 1, 4)), True
            ).otherwise(False)
                )
    df.show()
    

    输出:

    +--------------+--------------------+---------------+
    |      column_1|            column_2|Required_column|
    +--------------+--------------------+---------------+
    |  K12B-45-84-6|K12B-02-36-504, I...|           true|
    |   J020-35-2-9|P12K-05-31-602, M...|          false|
    |L006-85-00-694|M10P-22-94-349,L0...|           true|
    |M002-22-36-989|U985-12-45-363,  ...|           true|
    +--------------+--------------------+---------------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2020-07-30
      相关资源
      最近更新 更多