簡體   English   中英

按類型從 pyspark dataframe 中刪除行

[英]remove rows from pyspark dataframe by type

我在 pyspark 中有一個包含產品項目的大文件,其中一些是准確的數字,其他包含字符串。 我想從 dataframe 中刪除所有帶有數字的行項目(計算效率高)。

|Product-1| Pj3f|
|Product-2| 12  |
|Product-3| Pj2F|
|Product-4| 20  |

如何按 pyspark dataframe 列中項目的類型過濾行? pyspark 過濾器 function 似乎沒有它的功能。

k

將該列castint ,然后僅過濾null值列。

  • 或者使用.rlike function

Example:

df.show()
#+---------+-----+
#|  product|descr|
#+---------+-----+
#|Product-1| pj3f|
#|product-2|   12|
#+---------+-----+

df.filter(col("descr").cast("int").isNull()).show()
df.filter(~col("descr").rlike("^([\s\d]+)$")).show()
#+---------+-----+
#|  product|descr|
#+---------+-----+
#|Product-1| pj3f|
#+---------+-----+

spark 中的列都是同一類型。 如果您將兩列與不同類型的union混合使用,spark 將嘗試將兩者轉換為有效類型,通常是String ,並放入值的字符串表示形式。

例子:

  • 一個String列和一個Float ,將生成一個String列,其中浮點數以字符串形式表示,點表示小數點。 String + Float => String
  • 一個Integer column union a Float會將所有整數轉換為 Floats。 Integer + Float => Float

對於你的情況將取決於,如果它是一個主題字符串或數字,我會 go 用於正則表達式過濾。

val stringsDF = df.filter(regex_extract($"column", "[0-9]+([.|,][0-9]+)?") === ""))

這將保留所有不遵循浮點數或 integer 值的值。

暫無
暫無

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

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