创建Dataframe的子集

时间:2016-09-06 18:39:14

标签: scala apache-spark dataframe hive

如果我有来自Hive的电子邮件地址数据框:

email_address    user_id

test@test.com    2134
null             2133
test4@test.com   2132
test5@test.com   21
test6@test.com   213
test7@test.com   21388
null             22
null             2134

我想创建两个数据框(一个数据框的所有user_id' s的电子邮件为null;另一个数据框的所有user_id' s的电子邮件都不为null)这样的事情:

First Dataframe:               Second Dataframe:

test@test.com    2134          null             22
test4@test.com   2132          null             2134
test5@test.com   21            null             2133
test6@test.com   213
test7@test.com   21388

我的代码如下:

val sparkConf = new SparkConf().setAppName("YOUR_APP_NAME").setMaster("local[10]")
val sc = new SparkContext(sparkConf)
val sqlContext = new SQLContext(sc)
val hiveContext = new HiveContext(sc)

hiveContext.setConf("hive.metastore.uris", "METASTORE_URI_NAME_HERE")

val df = hiveContext.sql("SELECT email,user_id FROM USERS")

df.map{ row =>
    if row.getString(0).length > 0 {
        //ADD INTO "First Dataframe"
        //row.getString(0) = email, row.getString(1) = user_id
    }else {
        //ADD INTO "First Dataframe"
        //row.getString(0) = email, row.getString(1) = user_id
    }
}  

我不确定是否需要创建一个全新的Dataframe或者我是如何创建它的。有什么指针吗?

1 个答案:

答案 0 :(得分:3)

在这种情况下,使用数据框函数isNull()会更容易。

df_no_nulls = df.where(col("email_address").isNull())

df_nulls = df.where(col("email_address").isNotNull())