要列出的Pyspark dataframe列
我试图将列值列表从数据帧提取到列表中要列出的Pyspark dataframe列,pyspark,pyspark-dataframes,Pyspark,Pyspark Dataframes,我试图将列值列表从数据帧提取到列表中 +------+----------+------------+ |sno_id|updt_dt |process_flag| +------+----------+------------+ | 123 |01-01-2020| Y | +------+----------+------------+ | 234 |01-01-2020| Y | +------+----------+------------+
+------+----------+------------+
|sno_id|updt_dt |process_flag|
+------+----------+------------+
| 123 |01-01-2020| Y |
+------+----------+------------+
| 234 |01-01-2020| Y |
+------+----------+------------+
| 512 |01-01-2020| Y |
+------+----------+------------+
| 111 |01-01-2020| Y |
+------+----------+------------+
输出应该是sno_id['123'、'234'、'512'、'111'的列表
然后我需要迭代列表,对列表中的每个值运行一些逻辑。我目前正在使用HiveWarehouseSession,通过使用hive.executeQuery(查询)将数据从hive表提取到Dataframe中
感谢您的帮助。这很容易,因为您可以先收集df,然后返回行类型列表
row_list = df.select('sno_id').collect()
然后可以迭代行类型,将列转换为列表
sno_id_array = [ row.sno_id for row in row_list]
sno_id_array
['123','234','512','111']
使用平面图和更优化的解决方案
sno_id_array = df.select("sno_id ").rdd.flatMap(lambda x: x).collect()
您试图在列表值上运行什么逻辑?您是否使用进程标志或updt或两者进行分组?我得到了
AttributeError:“list”对象没有属性“collect”
,因此不要使用sno\u id\u数组=[row.sno\u id表示row\u list中的行。collect()]
使用sno\u id\u数组=[row.sno\u id表示row\u列表中的行]
为什么rdd flatmap更优化?如果您注意到在第一种方法中,我们收集数据帧,然后迭代每个值,而在第二种方法中,我们不需要这样做,而是直接迭代rdd