簡體   English   中英

根據列數據類型過濾Spark數據幀

[英]Filter a spark dataframe based on column datatypes

我有一個帶有col_a和col_b的數據框,並且在收到的實木復合地板文件中都寫為“ String”。 col_b可以是int或字符串,我想過濾掉col_b不是int的所有行。

Input:
col_A   col_b
1       "abc"
2       "3"
3       "xyz"

Output:
col_a   col_b
2       3

我了解我需要打字,但不確定如何繼續進行

這里實際上不需要UDF。 您可以cast列強制轉換為int並且在失敗的任何地方都將返回null ,然后過濾非null行。

val df = Seq((1, "abc"),
             (2, "3"),
             (3, "xyz")).toDF("col_a", "col_b")

df.filter( $"col_b".cast("int").isNotNull ).show

//+-----+-----+
//|col_a|col_b|
//+-----+-----+
//|    2|    3|
//+-----+-----+

您可以對數據框使用filter操作來過濾非整數值。 創建UDF,將接受列值,並返回true如果該值可以被轉換為Int ,否則返回false

//your original DF
val df = Seq((1, "abc"),
  (2, "3"),
  (3, "xyz")).toDF("col_a", "col_b")

//create a udf for filter function
val isValueInt = udf((value: String) => Try(value.toInt).isSuccess)

//apply the filter on DF
df.filter(isValueInt($"col_b")).show(false)

//    output
//    +-----+-----+
//    |col_a|col_b|
//    +-----+-----+
//    |1    |3    | 
//    +-----+-----+

暫無
暫無

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

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