簡體   English   中英

篩選計數等於輸入文件rdd Spark的列

[英]Filter columns having count equal to the input file rdd Spark

我正在使用以下邏輯從輸入鑲木文件中過濾Integer列,並試圖修改此邏輯以添加其他驗證,以查看是否有任何輸入列的計數等於輸入鑲木文件rdd計數。 我想過濾掉這樣的列。

更新

輸入文件中的列數和名稱的數目不是一成不變的,每次我們獲取文件時它都會改變。 目的還在於過濾出計數等於輸入文件rdd計數的列。 使用以下邏輯已經可以過濾整數列。

e.g input parquet file count = 100
    count of values in column A in the input file  = 100 

過濾掉任何這樣的列。

電流邏輯

 //Get array of structfields

val columns = df.schema.fields.filter(x => 
                x.dataType.typeName.contains("integer"))

  //Get the column names
  val z = df.select(columns.map(x => col(x.name)): _*)

  //Get array of string 
  val m = z.columns

新邏輯就像

  val cnt = spark.read.parquet("inputfile").count()

  val d = z.column.where column count is not equals cnt 

我不想將列名顯式傳遞給新條件,因為計數等於輸入文件的列將發生變化(上面的val d = ..)我們如何為此編寫邏輯?

根據我對您的問題的理解,您正在嘗試對integer作為dataType的列進行filter ,其不重復distinct count不等於另一個輸入parquet文件中的rows count 如果我的理解是正確的,則可以在現有過濾器中添加列數過濾器,如下所示:

val cnt = spark.read.parquet("inputfile").count()
val columns = df.schema.fields.filter(x =>
  x.dataType.typeName.contains("string") && df.select(x.name).distinct().count() != cnt)

其余代碼應照原樣進行。

我希望答案會有所幫助。

Jeanr和Ramesh建議使用正確的方法,這是我為獲得所需輸出所做的工作,它很有效:)

cnt = (inputfiledf.count())

val r = df.select(df.col("*")).where(df.col("MY_COLUMN_NAME").<(cnt))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM