Unity Catalog启用后Databricks中PySpark RDD白名单问题及替代方案咨询
解决方法
启用Unity Catalog的共享用户集群出于安全管控,限制了RDD相关底层方法的调用,直接用PySpark DataFrame API就能实现相同逻辑,无需依赖RDD操作:
方式一:分两次提取列值
# 获取第一列所有值转为列表 list = [row[0] for row in df_list.collect()] # 获取第二列所有值转为列表 hlist = [row[1] for row in df_list.collect()]
方式二:一次性收集后拆分(更高效)
如果DataFrame数据量较大,推荐先一次性收集所有行,再拆分两列,减少集群查询次数:
all_rows = df_list.collect() list = [row[0] for row in all_rows] hlist = [row[1] for row in all_rows]
方式三:指定列名提取(更清晰)
如果知道DataFrame的列名,直接通过列名提取可读性更强:
假设第一列名为first_col,第二列名为second_col:
list = [row.first_col for row in df_list.select("first_col").collect()] hlist = [row.second_col for row in df_list.select("second_col").collect()]
这些写法都不会触发RDD相关的安全限制,同时实现了原代码提取两列值为列表的逻辑。
内容的提问来源于stack exchange,提问作者Developer Rajinikanth
相关产品推荐
相关产品推荐

