我在pyspark中有一个包含产品项的大文件,其中一些是精确的数字,另一些包含字符串。我想从Dataframe中删除所有带有数字的行项目(计算效率高)。
|Product-1| Pj3f| |Product-2| 12 | |Product-3| Pj2F| |Product-4| 20 |
如何按pysparkDataframe列中项目的类型筛选行?pyspark filter函数似乎没有相应的功能。k
hgc7kmma1#
spark中的列都是同一类型的。如果你把两个柱子和一个 union 例如,对于不同的类型,spark通常会尝试转换为两者的有效类型 String ,并放置值的字符串表示形式。示例:一 String 列和a Float ,将导致 String 列,浮点数表示为小数点的字符串。 String + Float => String 一 Integer 柱接头a Float 将所有整数转换为浮点数。 Integer + Float => Float 对于你的情况将取决于,如果它是一个主题字符串或数字,我会去正则表达式过滤。
union
String
Float
String + Float => String
Integer
Integer + Float => Float
val stringsDF = df.filter(regex_extract($"column", "[0-9]+([.|,][0-9]+)?") === ""))
这将保留所有不跟随浮点或整数值的值。
sxissh062#
cast 将列添加到 int 然后只过滤 null 值列。或者使用 .rlike 功能 Example: ```df.show()
cast
int
null
.rlike
Example:
df.filter(col("descr").cast("int").isNull()).show()df.filter(~col("descr").rlike("^([\s\d]+)$")).show()
2条答案
按热度按时间hgc7kmma1#
spark中的列都是同一类型的。如果你把两个柱子和一个
union
例如,对于不同的类型,spark通常会尝试转换为两者的有效类型String
,并放置值的字符串表示形式。示例:
一
String
列和aFloat
,将导致String
列,浮点数表示为小数点的字符串。String + Float => String
一Integer
柱接头aFloat
将所有整数转换为浮点数。Integer + Float => Float
对于你的情况将取决于,如果它是一个主题字符串或数字,我会去正则表达式过滤。这将保留所有不跟随浮点或整数值的值。
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|
+---------+-----+