pyspark - 在 pyspark 中调用函数,将数据帧中的值作为字符串
问题描述
我必须调用一个func_test(spark,a,b)
接受两个字符串值的函数并从中创建一个 df 。spark
是一个SparkSession
变量这两个字符串值是另一个数据帧的两列,并且对于该数据帧的不同行会有所不同。
我无法做到这一点。
到目前为止尝试过的事情:
1。
ctry_df = func_test(spark, df.select("CTRY").first()["CTRY"],df.select("CITY").first()["CITY"])
仅给出 df 的第一条记录的 CTRY 和 CITY。
2.
ctry_df = func_test(spark, df['CTRY'],df['CITY'])
给出Column<b'CTRY'>
和Column<b'CITY'>
作为值。
示例:df 是:
+----------+----------+-----------+
| CTRY | CITY | XYZ |
+----------+----------+-----------+
| US | LA | HELLO|
| UK | LN | WORLD|
| SN | SN | SPARK|
+----------+----------+-----------+
所以,我想先调用 fetch func_test(spark,US,LA)
;第二次打电话func_test(spark,UK,LN)
;第三个电话是func_test(spark,SN,SN)
等等。
Pyspark - 3.7
Spark - 2.2
编辑1:
详细问题:
func_test(spark,string1,string2)
是一个接受两个字符串值的函数。这个函数内部是一组完成的各种数据帧操作。例如:- func_test 中的第一个 spark sql 是一个普通的选择,这两个变量 string1 和 string2 用于 where 子句。这个生成 df 的 spark sql 的结果是下一个 spark sql 的临时表,依此类推。最后,它创建了一个该函数func_test(spark,string1,string2)
返回的 df。
现在,在主类中,我必须调用这个 func_test 并且两个参数 string1 和 string2 将从数据帧的记录中获取。因此,第一个 func_test 调用生成查询为select * from dummy where CTRY='US' and CITY='LA'
. 并且随后的操作会导致 df. 第二次调用 func_test 变为select * from dummy where CTRY='UK' and CITY='LN'
. 第三次调用成为select * from dummy where CTRY='SN' and CITY='SN'
等等。
解决方案
而不是first()
使用collect()
并遍历循环
collect_vals = df.select('CTRY','CITY').distinct().collect()
for row_col in collect_vals:
func_test(spark, row_col['CTRY'],row_col['CITY'])
希望这可以帮助 !!
推荐阅读
- python - 压缩这些循环的有效方法
- python - Python将本地值分配给导入模块中的属性
- mysql - 在 FROM 子句 MySql 8 中指定要更新的目标表
- algorithm - 距离最近的单元格的距离超过时间限制 1
- python - 如何更改 Altair 的 Filled Step 图表中的线条颜色?
- xamarin.forms - Xamarin 表单中带有图像或 ImageButton 的按钮问题
- java - 如何在 Spring Boot 应用程序中使用 Apache Tailer?
- django-rest-framework - 在 DRF 中使用 super() 更改方法中间的代码字符串的可能性
- python - random.randint 导入似乎无法正常工作
- makefile - 如何在 cmake/make 中编译许多特定目标