开发者社区> 问答> 正文

获取数组中项目的索引,该数组是Spark数据帧中的列

我可以通过执行以下操作,根据数组字段中是否存在特定值来过滤Spark数据帧(在PySpark中):

from pyspark.sql.functions import array_contains
spark_df.filter(array_contains(spark_df.array_column_name, "value that I want")).show()
有没有办法获得数组中项目所在位置的索引?似乎应该存在,但我找不到它。

展开
收起
社区小助手 2018-12-21 13:51:38 2130 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    在spark 2.4+中,有以下array_position功能:

    df = spark.createDataFrame([(["c", "b", "a"],), ([],)], ['data'])
    df.show()

    +---------+

    | data|

    +---------+

    |[c, b, a]|

    | []|

    +---------+

    from pyspark.sql.functions import array_position
    df.select(df.data, array_position(df.data, "a").alias('a_pos')).show()

    +---------+-----+

    | data|a_pos|

    +---------+-----+

    |[c, b, a]| 3|

    | []| 0|

    +---------+-----+

    来自文档的说明:

    仅定位给定数组中给定值的第一次出现的位置;

    该位置不是基于零的,而是基于1的索引。如果在数组中找不到给定值,则返回0。

    2019-07-17 23:23:26
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载