如何在 pyspark 中查找不合规的行

Posted

技术标签:

【中文标题】如何在 pyspark 中查找不合规的行【英文标题】:How to find non compliant rows in pyspark 【发布时间】:2020-07-15 16:22:57 【问题描述】:

我正在尝试查找和隔离某些列不遵循某些模式的行。我从 databricks 文档中找到了以下示例,用于识别和检查列值是否为整数,并将不良记录写入 json 文件。

我想确定一列值是否像 1,245.00 和坏记录是否像 1.245,00。 这些值可以改变位数,只是想检查数据是否遵循 pyspark 中的 1,245.00 之类的模式。

有时在原始数据中,逗号和点会互换。

谁能告诉我如何在 badrecordpath 中收集此类记录,如下例所示?

// Creates a json file containing both parsable and corrupted records
Seq(""""a": 1, "b": 2""", """bad-record""").toDF().write.text("/tmp/input/jsonFile")

val df = spark.read
  .option("badRecordsPath", "/tmp/badRecordsPath")
  .schema("a int, b int")
  .json("/tmp/input/jsonFile")

df.show()

上面的例子在 scala 中,如果可能的话,我正在寻找 pyspark 解决方案。谢谢。

【问题讨论】:

您能发布一些示例输入数据和预期输出吗? 【参考方案1】:

请在下面找到一些示例(最后两位小数)

1,245.00 
3,5000.80
6.700,00
5.7364732.20
4,500,600.00

具有以下数据的数据框(符合规定)应具有点和两位小数

1,245.00 
3,5000.80
4,500,600.00

badRecordsPath(小数点前的逗号)中应保留非法数据点

6.700,00
5.7364732,20

谢谢

【讨论】:

以上是关于如何在 pyspark 中查找不合规的行的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pyspark 2.1.0 选择另一个数据框中不存在的行?

使用 pyspark 在单次遍历数据中查找最小值/最大值

如何转换由 | 分隔的顺序数据并且在 pyspark 中的行和列中没有换行符

Pyspark:如何仅在具有 NotNull 值的行上应用 UDF

在pyspark中删除所有包含一个字母的行[重复]

如何在 PySpark 中进行分组并查找列的唯一项目 [重复]