[英]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.