需要在spark数据帧上对sql查询应用相关矩阵

时间:2017-11-27 22:32:17

标签: scala apache-spark apache-spark-sql spark-dataframe

我有一个样本数据集,其中包含与组织员工相关的数据。请在下面找到数据集的架构。

我想在这里解决的问题是,员工使用相关矩阵坚持组织的最重要标准是什么。 我试图在spark / scala中的sql查询中解决这个问题。

Schema of the Dataset
 |-- satisfaction_level: float 
 |-- last_evaluation: float 
 |-- number_project: integer 
 |-- average_monthly_hours: integer 
 |-- time_spend_company: integer 
 |-- work_accident: integer 
 |-- left: integer 
 |-- promotion_last_5years: integer 
 |-- department: string 
 |-- salary: string 

我尝试了下面这个查询,但它没有让我得到任何结果,根据我对数据的理解和分析,我可以证明当satisf_level下降时员工倾向于离开组织

val correlationVal = employeesDF.stat.corr("satisfaction_level","left")

我在编写sql查询时遇到了解决上述问题的问题,有人可以帮我吗?为此问题应用相关矩阵的正确方法是什么?

注意:如果有更好/更简单的方法使用Spark解决此问题,请分享我的输入。

1 个答案:

答案 0 :(得分:0)

这是一个适合我的最小代码:

import org.apache.spark.sql.{DataFrame,Row}
import org.apache.spark.sql.Row
import org.apache.spark.sql.types._
import org.apache.spark.{SparkConf, SparkContext }
import org.apache.spark.sql.hive.HiveContext
val schema = StructType( Array(
      StructField("col1", IntegerType, true),
      StructField("col2", FloatType, true)
    ))

val rdd = sc.parallelize( Seq(Row(1, 1.34.toFloat), Row(2, 2.02.toFloat), Row(3, 3.4.toFloat), Row(4, 4.2.toFloat)))
val dataFrame = spark.createDataFrame(rdd, schema)
dataFrame.stat.corr("col1","col2")

结果为0.9914,几乎接近1表示列是相关的。