相关疑难解决方法(0)

如何根据PySpark中的数组值进行过滤?

我的架构:

|-- Canonical_URL: string (nullable = true)
 |-- Certifications: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- Certification_Authority: string (nullable = true)
 |    |    |-- End: string (nullable = true)
 |    |    |-- License: string (nullable = true)
 |    |    |-- Start: string (nullable = true)
 |    |    |-- Title: string (nullable = true)
 |-- CompanyId: string (nullable = true)
 |-- Country: string (nullable = true)
|-- vendorTags: array (nullable = true)
 |    |-- …
Run Code Online (Sandbox Code Playgroud)

python dataframe apache-spark apache-spark-sql pyspark

9
推荐指数
2
解决办法
1万
查看次数

Pyspark:将一列中的值与另一列中同一行中的列表进行匹配

我有一个数据框,其中包含以下 2 列: 1. ID 2. list_IDs

我正在尝试创建第三列,如果 ID 存在于同一行的 list_ID 列中,则返回布尔值 True 或 False

我尝试过使用以下内容:

df = sqlContext.createDataFrame([(1, [1, 2, 3,]), (2, [1, 3, 4])], ("ID", "list_IDs"))

df.withColumn("IDmatch", when(col("ID").isin(F.col("list_IDs")), True).otherwise(False)).show()
Run Code Online (Sandbox Code Playgroud)

那是行不通的。但是,如果我要提供一些静态列表来匹配,它当然可以工作。

df.withColumn("IDmatch", when(col("ID").isin([2, 3]), True).otherwise(False)).show()
Run Code Online (Sandbox Code Playgroud)

我可以使用 udf 返回布尔类型,这也有效:

@udf(returnType=BooleanType())
def isinlist(x, y):
    return x in y

Run Code Online (Sandbox Code Playgroud)

但是,如果可能的话,我试图避免在这种情况下使用 UDF,并且我想知道是否可以使用类似于 .isin() 的本机内容来检查行中的 ID 是否存在于 list_ID 的值列表中同一行的列?

python apache-spark pyspark

4
推荐指数
1
解决办法
7589
查看次数