繁体   English   中英

在 SPARK DataFrame 上循环

[英]Loop on SPARK DataFrame

环境:Spark 2.4 + Scala 2.11.12

我有名为 DF_ACTION 的 DF

--------------------------------------
process  |action_step|MAC|action_name
----------------------------------------
HighError|1          |PQR| callAPI A
---------------------------------------
HighError|2          |PQR| callAPI B 
---------------------------------------
HighError|1          |XYZ| callAPI A
---------------------------------------
HighError|2          |XYZ| callAPI B 
---------------------------------------
Restart  |1          |1BC| callAPI X
---------------------------------------
Restart  |2          |1BC| callAPI Y

现在我正在尝试根据 DF_ACTION 的值调用一些函数并执行一些任务

for (i<-DF_ACTION){
  If (i.process==="HighError" ) and (i.step_no===1)  // error in this line
{
     call function A
     call function B
  }

  sleep(20 minutes)

  If (i.process==="HighError" ) and (i.step_no===2)  // error in this line
{
     call function p
     call function q
  }    
}

希望我能够解释问题。 提前感谢约翰

首先,您尝试的语法将不起作用,因为您无法将 DataFrame 或列与字符串或 int 进行比较

您可以先收集数据,然后遍历它们,因此现在您正在比较相似的数据类型。 请记住,如果它是一个非常大的数据集,那么使用它不是一个好主意

如果我在下面正确理解了您的问题,可以作为示例代码供您尝试

val cll = df_action.select("process", "action_step").collect

for(cl <- cll){
    if (cl(0) == "HighError" && cl(1) == 1){
       call function A
       call function B
    }
    if (cl(0) == "HighError" && cl(1) == 2){
       call function p
       call function q
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM