我必须调用一个函数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|
+----------+----------+-----------+
因此,我想首先调用以获取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的临时表,依此类推。最后,它创建一个df,此函数func_test(spark,string1,string2)
返回。
现在,在主类中,我必须调用此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'
,依此类推。
答案 0 :(得分:1)
使用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'])
希望这会有所帮助!