我有一个大文件,其中一些是精确数字,另一些是包含字符串。我希望从dataframe中删除所有带有数字的行项(计算效率高)。
|Product-1| Pj3f|
|Product-2| 12 |
|Product-3| Pj2F|
|Product-4| 20 |我如何按项目的类型在的列中筛选行?吡火花过滤器功能似乎没有它的功能。
K
发布于 2020-05-17 17:35:25
将该列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|
#+---------+-----+发布于 2020-05-17 17:34:38
星火中的列都是相同的类型。如果将两列与不同类型的union混合使用,spark将尝试转换为两种类型(通常为String )的有效类型,并将值的字符串表示形式放入其中。
示例:
String列和一个Float将生成一个String列,其中浮点数表示为带有小数点的字符串。String + Float => StringInteger列联合( Float )将将所有整数转换为浮点数。Integer + Float => Float对于您的情况,如果它是一个主题字符串或数字,我将选择regex筛选。
val stringsDF = df.filter(regex_extract($"column", "[0-9]+([.|,][0-9]+)?") === ""))这将保留所有不跟随浮点数或整数值的值。
https://stackoverflow.com/questions/61855832
复制相似问题