当前位置: 首页 > 知识库问答 >
问题:

如何在pyspark中获取数组类型()的另一列中一列的值索引?

於意蕴
2023-03-14

我使用的是火花 2.4。
我在火花数据帧中有一个数组类型(字符串类型())列和一个字符串类型()列。我需要在数组类型(字符串类型())列中找到字符串类型()列的位置。

样本输入:

+---------------+---------+
|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但它不起作用,我得到了“列不可迭代”错误。
我也尝试过组合exr、变换和array_position,但我想知道是否有不需要使用exr的解决方案。
谢谢:)

共有1个答案

邹正阳
2023-03-14

使用< code>array_position函数尝试使用< code>expr。

示例:

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|
#+---------+---------+-----+
 类似资料:
  • 我有一个数据集DF,其中包括USER和DATETIME两列(列索引不在我的数据中。它是输出应该是什么样子)。DF中的行显示了每一分钟的活动。我想要的是创建并填充一个名为“index”的列。这个索引是显示等于或小于4分钟的活动。换句话说,如果第i行的DATETIME与其后面的第i 1行之间的差异小于或等于4分钟,则它们在同一个索引中(即在同一个活动中)。但是,如果这个差异大于4分钟,下一行(i 1)

  • 我在数组列表(嵌套数组列表)中有一个数组列表,如下所示 现在我需要获取存在于arraylist的给定索引中的的实例并为其添加一个值。我使用了以下代码 但是它给了我一个错误 线程"main"java.lang.异常索引:0,大小:0 如何解决这个问题以及为什么会发生这种情况。 谢谢你

  • 问题内容: 我想用相邻列中的值替换一列中的空值,例如,如果我有 我希望它是: 尝试过 但是没用,它说值应该是浮点数,整数,长整数,字符串或字典 有任何想法吗? 问题答案: 最后找到一个替代方案:

  • 我正在尝试制作一个纸牌游戏,它有游戏类、纸牌类、玩家类、副牌类和手牌类。我想让它模拟现实生活,你从一副牌中抽5张牌到你手上 我让我的班级玩家将所有的卡片添加到一个叫做卡片的卡片组中。像这样: 它把它传递给我的班级甲板: 我在类手叫手创建了一个手数组列表: 如何将 5 个随机卡牌对象从我的套牌数组列表添加到我的手牌数组列表中?

  • 我有一个包含3列的数据表,我想使用列投影的值创建一个新列。 应该如何从投影中选择值?--它应该选择前一年投影的3个具体值--如果您要为2020年创建一个新列,它应该从2021年、2022年和2023年选择值 我已经尝试了以下SQL: spark.sql(''从表中选择serial_number,pit_pd_proj为proj1,year,lead(pit_pd_proj,3)over(parti

  • 我的熊猫数据框中有2列。 我想去掉可乐和可乐,用可乐代替。 基本上,我需要用cola和colb中的值填充colc。如果可乐中有一个楠,那么它会从可乐中拉出,如果可乐中有一个楠,它会从可乐中拉出。如果可乐和可乐中没有楠,它们应该总是相等的。 我将如何在熊猫身上实现这一点?