获取数组Pyspark中的第一个元素

时间:2019-06-13 13:52:06

标签: pyspark

我想添加新的2列值服务arr第一和第二个值 但出现错误:

  

字段名称应为String Literal,但应为0;

let uninstallTask = Process()
        uninstallTask.launchPath = "/bin/bash"
//MarkerPro is an app in launchpad
        uninstallTask.arguments = ["-c","sudo rm -rf "+"/Applications/MarkerPro.app"]
        uninstallTask.launch()
production_target_datasource_df.withColumn("newcol",production_target_datasource_df["Services"].getItem(0))

2 个答案:

答案 0 :(得分:0)

正如错误所说,您需要传递一个不是0的字符串。 然后,您想知道:我应该传递什么字符串?

如果遵循@pault建议和printSchema,您实际上将知道列表中值的对应键是什么。

这是getItem的文档,可帮助您解决这一问题。 enter image description here

知道要传递什么的另一种方法是简单地传递任何字符串,您可以输入:

production_target_datasource_df.withColumn("newcol",production_target_datasource_df["Services"].getItem('0'))

,日志将告诉您期望使用哪些键。

希望这会有所帮助;)

答案 1 :(得分:-1)

您不必使用.getItem(0)

production_target_datasource_df["Services"][0]就足够了。

# Constructing your table:
from pyspark.sql import Row

df = sc.parallelize([Row(cid=1,Services=["2", "serv1"]),
Row(cid=1, Services=["3", "serv1"]),
Row(cid=1, Services=["4", "serv2"])]).toDF()
df.show()
+---+----------+
|cid|  Services|
+---+----------+
|  1|[2, serv1]|
|  1|[3, serv1]|
|  1|[4, serv2]|
+---+----------+

# Adding the two columns:
new_df = df.withColumn("first_element", df.Services[0])
new_df = new_df.withColumn("second_element", df.Services[1])
new_df.show()

+---+----------+-------------+--------------+
|cid|  Services|first_element|second_element|
+---+----------+-------------+--------------+
|  1|[2, serv1]|            2|         serv1|
|  1|[3, serv1]|            3|         serv1|
|  1|[4, serv2]|            4|         serv2|
+---+----------+-------------+--------------+