使用数据框中的值作为字符串调用 pyspark 中的函数
Call function in pyspark with values from dataframe as strings
我必须调用一个函数 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 是一个普通的 select 并且这两个变量 string1 和 string2 在 where 子句中使用。这个生成 df 的 spark sql 的结果是下一个 spark sql 的 temp table 等等。最后,它创建一个 df,这个函数 func_test(spark,string1,string2)
returns.
现在,在主要 class 中,我必须调用此 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'])
希望对您有所帮助!!
我必须调用一个函数 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 是一个普通的 select 并且这两个变量 string1 和 string2 在 where 子句中使用。这个生成 df 的 spark sql 的结果是下一个 spark sql 的 temp table 等等。最后,它创建一个 df,这个函数 func_test(spark,string1,string2)
returns.
现在,在主要 class 中,我必须调用此 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'])
希望对您有所帮助!!