我的代码为:
new_df=spark.sql("Select col1,col2 from table1 where id=2").collect()[0][0]
我尝试过LocalIterator((,但得到的消息是不可下标的。请建议一种更好的方法来替换collect(([0][0]。
IIUC-
假设这是测向的结果
+----+---+---------------+
| id|num| list_col|
+----+---+---------------+
|1001| 5|[1, 2, 3, 4, 5]|
|1002| 3| [1, 2, 3]|
+----+---+---------------+
为了获得list_col的第一个值,请在现有代码中再使用一个[]
print(df.select("list_col").collect()[0][0][0])
will give you 1
同样,这将给你2
print(df.select("list_col").collect()[0][0][1])
根据新的理解更新我的答案-即从数据帧访问列表列的第一个元素
df = df.withColumn("list_element", F.col("list_col").getItem(0))
df.show()
+----+---+---------------+------------+
| id|num| list_col|list_element|
+----+---+---------------+------------+
|1001| 5|[1, 2, 3, 4, 5]| 1|
|1002| 3| [1, 2, 3]| 1|
+----+---+---------------+------------+