Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用dataframe中的值作为字符串调用pyspark中的函数_Pyspark_Pyspark Sql_Pyspark Dataframes - Fatal编程技术网

使用dataframe中的值作为字符串调用pyspark中的函数

使用dataframe中的值作为字符串调用pyspark中的函数,pyspark,pyspark-sql,pyspark-dataframes,Pyspark,Pyspark Sql,Pyspark Dataframes,我必须调用一个函数func_test(spark,a,b),它接受两个字符串值并从中创建一个dfspark是一个SparkSession变量 这两个字符串值是另一个数据帧的两列,并且对于该数据帧的不同行来说是不同的 我无法做到这一点 迄今为止尝试过的事情: 一, 仅给出了CTRY和CITY的首个df记录 二, 将列和列作为值提供 例如: df是: 所以,我想首先调用fetchfunc_test(spark,US,LA);第二次调用gofunc_测试(spark,UK,LN);第三个调用是func

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

我无法做到这一点

迄今为止尝试过的事情:
一,

仅给出了CTRY和CITY的首个df记录

二,

作为值提供

例如: df是:

所以,我想首先调用fetch
func_test(spark,US,LA)
;第二次调用go
func_测试(spark,UK,LN)
;第三个调用是
func\u测试(spark、SN、SN)
等等

Pyspark - 3.7
Spark - 2.2
编辑1:

详情如下:

func_test(spark、string1、string2)
是一个接受两个字符串值的函数。此函数中包含一组完成的各种数据帧操作。例如:-func_测试中的First spark sql是一个普通的select,这两个变量string1和string2在where子句中使用。生成df的spark sql的结果是下一个spark sql的临时表,依此类推。最后,它创建一个df,该函数
func_test(spark,string1,string2)
返回该df

现在,在main类中,我必须调用这个func_测试,两个参数string1和string2将从dataframe的记录中获取。所以,第一个func_测试调用将从CTRY='US'和CITY='LA'所在的dummy生成查询,作为
select*。随后的操作会导致df。对func_测试的第二次调用变为
select*from dummy,其中CTRY='UK'和CITY='LN'
。第三个调用变成
select*from dummy,其中CTRY='SN'和CITY='SN'
等等。

而不是
first()
使用
collect()
并迭代循环

Pyspark - 3.7
Spark - 2.2
collect_vals = df.select('CTRY','CITY').distinct().collect()
for row_col in collect_vals:
    func_test(spark, row_col['CTRY'],row_col['CITY'])


希望这有帮助

我没有完全理解你的问题,但我认为你想在另一个2列值上按函数定义新列,对吗?不,我不想创建新列。我想创建一个新的数据帧ctry_df,它与df没有任何关系。但是ctry_df必须具有由func_test(a,b)执行的操作结果的列。是否要使用相同的架构创建新的数据帧?架构将与新的数据帧不同。如果不清楚,我可以试着用更详细的形式解释这个问题。是的,我认为它很复杂。为什么我们需要在这里明确?CTRY和CITY的组合也可以在df的其他行中重复。现在它可以接近预期工作。谢谢,我假设您需要使用单一组合一次。但如果您不想重复数据消除,则不需要使用distinct。继续此操作时需要一个输入:-在第一次调用CTRY和CITY时,返回df(一行)。下一次呼叫下一个中心和城市时,返回下一个df(另一行)。有没有一种方法可以将所有这些df一个一个地堆叠起来,并创建一个最终的df(或一个临时表),其末尾有尽可能多的行?您只需从返回过滤值的位置与df进行连接即可。加入同一个关键国家和城市。
Pyspark - 3.7
Spark - 2.2
collect_vals = df.select('CTRY','CITY').distinct().collect()
for row_col in collect_vals:
    func_test(spark, row_col['CTRY'],row_col['CITY'])