如果我有来自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或者我是如何创建它的。有什么指针吗?
答案 0 :(得分:3)
在这种情况下,使用数据框函数isNull()
会更容易。
df_no_nulls = df.where(col("email_address").isNull())
df_nulls = df.where(col("email_address").isNotNull())