apache-spark - 如何在pyspark中获取ArrayType()另一列中某一列的值的索引?

标签 apache-spark pyspark

我使用的是 Spark 2.4。
我在 Spark 数据框中有一个 ArrayType(StringType()) 列和一个 StringType() 列。我需要找到 StringType() 列在 ArrayType(StringType()) 列中的位置。

示例输入:

+---------------+---------+
|arrayCol       |stringCol|
+---------------+---------+
|['a', 'b', 'c']|'b'      |
+---------------+---------+
|['a', 'b', 'c']|'d'      |
+---------------+---------+

示例输出:

+---------------+---------+-----+
|arrayCol       |stringCol|Index|
+---------------+---------+-----+
|['a', 'b', 'c']|'b'      |2    |
+---------------+---------+-----+
|['a', 'b', 'c']|'d'      |null |
+---------------+---------+-----+

我尝试过 array_position 但它不起作用,并且收到“列不可迭代”错误。
我也尝试过组合 expr、transform 和 array_position,但我想知道是否有不需要使用 expr 的解决方案
谢谢:)

最佳答案

尝试使用 exprarray_position 函数。

示例:

df.show()
#+---------+---------+
#| arrayCol|stringCol|
#+---------+---------+
#|[a, b, c]|        b|
#|[a, b, c]|        d|
#+---------+---------+

from pyspark.sql.functions import *
df.withColumn("Index",expr('if(array_position(arrayCol,stringCol)=0,null,array_position(arrayCol,stringCol))')).\
show()
#+---------+---------+-----+
#| arrayCol|stringCol|Index|
#+---------+---------+-----+
#|[a, b, c]|        b|    2|
#|[a, b, c]|        d| null|
#+---------+---------+-----+

关于apache-spark - 如何在pyspark中获取ArrayType()另一列中某一列的值的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63747044/

相关文章:

apache-spark - pySpark 中这两种不同形式的排序(orderBy)有区别吗?

apache-spark - 避免Spark窗口功能中单个分区模式的性能影响

scala - 将 Spark 结构化流与 Trigger.Once 结合使用

sql - 其他字段上的窗口功能平局断路器以获取最新记录

pyspark - 基于某些条件在 databricks notebook 中执行 cmd 单元格

apache-spark - Parquet 中的嵌套数据类型

apache-spark - 对于相同的配置,Spark s3a会引发403错误

java - 在 IntelliJ 中使用 build.sbt 排除 JAR 文件中的依赖项签名文件

apache-spark - 使用 Dataframes 从 Informix 到 Spark 的 JDBC

java - spark 返回错误 libsnappyjava.so : failed to map segment from shared object: Operation not permitted