按类型从pysparkDataframe中移除行

amrnrhlw  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(412)

我在pyspark中有一个包含产品项的大文件,其中一些是精确的数字,另一些包含字符串。我想从Dataframe中删除所有带有数字的行项目(计算效率高)。

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

如何按pysparkDataframe列中项目的类型筛选行?pyspark filter函数似乎没有相应的功能。
k

hgc7kmma

hgc7kmma1#

spark中的列都是同一类型的。如果你把两个柱子和一个 union 例如,对于不同的类型,spark通常会尝试转换为两者的有效类型 String ,并放置值的字符串表示形式。
示例:
String 列和a Float ,将导致 String 列,浮点数表示为小数点的字符串。 String + Float => StringInteger 柱接头a Float 将所有整数转换为浮点数。 Integer + Float => Float 对于你的情况将取决于,如果它是一个主题字符串或数字,我会去正则表达式过滤。

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

这将保留所有不跟随浮点或整数值的值。

sxissh06

sxissh062#

cast 将列添加到 int 然后只过滤 null 值列。
或者使用 .rlike 功能 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|

+---------+-----+

相关问题