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