Apache spark SPARK:如何实现CASE-ELSE部分以及在何处相似和之间

Apache spark SPARK:如何实现CASE-ELSE部分以及在何处相似和之间,apache-spark,Apache Spark,我有如下数据 hduser@ubuntu:~$ hadoop fs -cat /user/hduser/test_sample/sample1.txt Eid1,EName1,EDept1,100 Eid2,EmpNm2,EDept1,102 Eid3,EName3,EDept1,101 Eid4,EName4,EDept2,110 Eid5,EName5,EDept2,121 Eid6,EName6,EDept4,99 我想得到如下输出 Eid1,EName1,IT,100 Eid3,ENa

我有如下数据

hduser@ubuntu:~$ hadoop fs -cat /user/hduser/test_sample/sample1.txt
Eid1,EName1,EDept1,100
Eid2,EmpNm2,EDept1,102
Eid3,EName3,EDept1,101
Eid4,EName4,EDept2,110
Eid5,EName5,EDept2,121
Eid6,EName6,EDept4,99
我想得到如下输出

Eid1,EName1,IT,100
Eid3,EName3,IT,101
Eid5,EName4,ComSc,110
Eid6,EName6,Other,99
现在我可以用SQL的形式编写

Select emp_id, emp_name, case when emp_dept='EDept1' then 'IT' 
when emp_dept='EDept2' then 'ComSc' else 'Other' end dept_name, emp_sal from emp 
Where emp_name like 'EName%' And emp_sal between 90 and 120
我的问题是1。如何实现案例陈述2中的其他部分。如何实现where第3条的类似部分。如何在where子句的部分之间实现


我不能使用sqlContext.sql,因为sql还包含分析函数,而spark sql目前不支持分析函数。

我不使用sqlContext.sql,而是继续使用HiveContext-HiveContext不需要安装配置单元,但它确实公开了更多配置单元UDF。如果这对您不起作用,您还可以编写一个UDF来转换部门并在sqlContext上注册它。

这样您就可以创建如下UDF:

val deptUdf = udf[String,String]( dept =>
  dept match {
    case "EDept1" => "IT"
    case "EDept2" => "ComSc"
    case _ => "Other"
  }
)
一旦这样做,您就可以在select语句中使用它。假设在“deptCode”列中有一个带有部门名称的数据框,则可以执行以下操作:

myDf.select(deptUdf($"deptCode") as "deptName")
对于第二部分和第三部分,有一个类似于的函数可以在过滤器中使用,并且可以使用和在之间实现:

myDf.filter($"emp_name" like "EName%" and $"emp_sal" >= 90 and $"emp_sal" <= 120)

myDf.filter($“emp_name”类似于“EName%”和$“emp_sal”>=90和$“emp_sal”Hi Koushik。当您在stackoverflow中询问某个问题时,请使用“code sample”按钮(看起来类似于
{}
)而不是“code snippet”.Snippets仅用于可在浏览器中运行的HTML、CSS和JavaScript。好的。下一次我将使用代码示例optionI刚才编辑的答案中有一个剪切粘贴错误。我可以创建一个数据框,如
val deptDF=sc.parallelize(数组((“EDept1”,“IT”),(“EDept2”,“ComSc”)).toDF(“deptCode”,“dept”)
并将其与其他数据框连接。但不确定如何处理案例的其他部分,即当没有任何内容与其他内容匹配时