pyspark中的调用函数,以数据帧中的值作为字符串

问题描述 投票:0回答:1

我必须调用一个函数func_test(spark,a,b),该函数接受两个字符串值并从中创建一个df。 sparkSparkSession变量这两个字符串值是另一个数据框的两列,并且对于该数据框的不同行将有所不同。

我无法实现。

到目前为止尝试过的事情:1。

ctry_df = func_test(spark, df.select("CTRY").first()["CTRY"],df.select("CITY").first()["CITY"])

仅给出首个记录的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',依此类推。

pyspark pyspark-sql pyspark-dataframes
1个回答
0
投票

而不是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'])

希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.