2016-09-06 159 views
1

一個子集,如果我有電子郵件地址,像這樣從蜂巢數據幀:創建的數據幀

email_address user_id 

[email protected] 2134 
null    2133 
[email protected] 2132 
[email protected] 21 
[email protected] 213 
[email protected] 21388 
null    22 
null    2134 

我要創建兩個dataframes(裏面有所有的USER_ID與電子郵件,爲空一個dataframes和它擁有所有的user_id與那些不爲空電子郵件的其他數據幀)事情是這樣的:

First Dataframe:    Second Dataframe: 

[email protected] 2134   null    22 
[email protected] 2132   null    2134 
[email protected] 21   null    2133 
[email protected] 213 
[email protected] 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

是將'df'變量轉換爲rdd然後過濾掉所有非空的電子郵件地址並將該rdd轉換爲數據框的選項之一。然後過濾出所有空(從原始rdd)的電子郵件地址,並將該rdd轉換爲數據框?所以我會有兩個數據框。 – CapturedTree

回答

3

在這種情況下使用數據幀功能isNull()更容易。

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

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