2016-10-18 6 views
0

ブール型列に関して、DataFrameを分割したいと考えています。ブール型列でDataFrameを分割する方法

私が作ってみた:

def partition(df: DataFrame, c: Column): (DataFrame, DataFrame) = 
    (df.filter(c === true), df.filter(c === false)) 

注:私のユースケースでは、cはUDFです。

良い方法がありますか?私が好きな

  • をここで醜いブールテストに

を避けるためにスキャンを2回DATAFRAME

  • を避けるためには、一例です:

    @ val df = sc.parallelize(Seq(1,2,3,4)).toDF("i") 
    df: org.apache.spark.sql.DataFrame = [i: int] 
    @ val u = udf((i: Int) => i % 2 == 0) 
    u: org.apache.spark.sql.UserDefinedFunction = UserDefinedFunction(<function1>, BooleanType, List(IntegerType)) 
    @ partition(df, u($"i")) 
    res25: (org.apache.spark.sql.DataFrame, org.apache.spark.sql.DataFrame) = ([i: int], [i: int]) 
    
  • +0

    再現可能な例を共有できますか? – mtoto

    +0

    combineByKeyを使用する –

    答えて

    0

    使用combineByKeyブール型列の場合

    data.combineByKey(lambda value: (value, 1), 
              lambda x, value: (x[0] + value, x[1] + 1), 
              lambda x, y: (x[0] + y[0], x[1] + y[1])) 
    
    関連する問題