【问题标题】:Counting number of commas in every row of a file计算文件每一行中的逗号数
【发布时间】:2020-11-28 15:24:08
【问题描述】:

我有一个文件,看起来像 -

Col1,Col2,Col3,Col4
值 11、值 12、值 13、值 14
价值21,价值22,价值23,价值24
..
..

我已将文件加载到 Pyspark 数据框中(我无法使用 python,因为数据集很大)

w1 = spark.read.format('csv').options(header='false', inferschema='false').load('./part1')

我想检查每一行是否有相同数量的逗号。有没有办法输出逗号数不等于 3 的行?

【问题讨论】:

  • 你在这里的意图是什么?检查 csv 格式是否正确??
  • 是的,完全正确。我必须根据这些数据建立一个模型——只想检查数据是否 100% 正确。

标签: python pyspark apache-spark-sql


【解决方案1】:

将 csv 文件作为文本读取,并按 , 拆分值并计算元素。

df = spark.read.text('test.csv')
df.show(10, False)

+-------------------------------+
|value                          |
+-------------------------------+
|Col1,Col2,Col3,Col4            |
|Value11,Value12,Value13,Value14|
|Value21,Value22,Value23,Value24|
+-------------------------------+

import pyspark.sql.functions as F

df2 = df.withColumn('count', F.size(F.split('value', ',')))
df2.show(10, False)

+-------------------------------+-----+
|value                          |count|
+-------------------------------+-----+
|Col1,Col2,Col3,Col4            |4    |
|Value11,Value12,Value13,Value14|4    |
|Value21,Value22,Value23,Value24|4    |
+-------------------------------+-----+

df2.groupBy().agg(F.min('count'), F.max('count')).show(10, False)

+----------+----------+
|min(count)|max(count)|
+----------+----------+
|4         |4         |
+----------+----------+

【讨论】:

    【解决方案2】:

    既然你想知道错误的行也是唯一的方法就是循环:

    In [18]: erroneous_lines = []
    
    In [19]: with open(r'C:\Users\abaskaran\Desktop\mycsv.txt') as fd:
        ...:     for line_num, line in enumerate(fd,1):
        ...:         if len(line.split(',')) != 4:
        ...:             erroneous_lines.append((line_num, line))
    
    
    In [20]: erroneous_lines
    Out[20]:
    [(5, 'Value21,Value22,Value23,Value24Value11,Value12,Value13,Value14\n'),
     (6, 'Value21,Value22,Value23\n')]
    

    erroneous_lines 列表将包含一个元组列表,其中包含行号和不包含所有值的行的实际内容..

    我将CSV内容修改如下j只是为了测试:

    Col1,Col2,Col3,Col4
    Value11,Value12,Value13,Value14
    Value21,Value22,Value23,Value24
    Value11,Value12,Value13,Value14
    Value21,Value22,Value23,Value24Value11,Value12,Value13,Value14
    Value21,Value22,Value23
    Value11,Value12,Value13,Value14
    Value21,Value22,Value23,Value24
    Value11,Value12,Value13,Value14
    Value21,Value22,Value23,Value24
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 2018-05-02
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      相关资源
      最近更新 更多