用python或spark计算大数据缺失值的最快方法是什么?

用python或spark计算大数据缺失值的最快方法是什么?,python,pyspark,bigdata,Python,Pyspark,Bigdata,我正在处理几个数据表,它们有超过2000万行和30多列。 目前我正在使用PythonPySpark计算空值并计算丢失率。 但一列检查需要40分钟。如果有任何其他更好的方法来处理它,使它更快,请让我知道。谢谢 我目前的代码是: variables = ['A', 'B', ....] for variable in variables: column = pandas.read_sql_query('select %s from dbo.ORDERS' % (variable), con=

我正在处理几个数据表,它们有超过2000万行和30多列。 目前我正在使用PythonPySpark计算空值并计算丢失率。 但一列检查需要40分钟。如果有任何其他更好的方法来处理它,使它更快,请让我知道。谢谢

我目前的代码是:

variables = ['A', 'B', ....]
for variable in variables:
    column = pandas.read_sql_query('select %s from dbo.ORDERS' % (variable), con=cnxn)
    column_missing = column.filter(column[variable].isnull()).count()
    total = len(column)
    missing = len(column_missing)
编辑代码:

import pyodbc
import pandas
import numpy
import datetime
import time
from pyspark.sql.functions import lit, col

order_pk = pandas.read_sql_query('select %s from dbo.ORDERS' % ('ORDER_PK'), con=cnxn)
summary = order_pk.describe().filter(col('ORDER_PK') == "count")
summary.select(*((lit(rows)-col(c)).alias(c) for c in order_pk.columns)).show()

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-12-30285cf9f59e> in <module>()
----> 1 summary = order_pk.describe().filter(col('ORDER_PK') == "count")
      2 summary.select(*((lit(rows)-col(c)).alias(c) for c in order_pk.columns)).show()

c:\users\pcui\appdata\local\programs\python\python37\lib\site-packages\pyspark\sql\functions.py in _(col)
     40     def _(col):
     41         sc = SparkContext._active_spark_context
---> 42         jc = getattr(sc._jvm.functions, name)(col._jc if isinstance(col, Column) else col)
     43         return Column(jc)
     44     _.__name__ = name

AttributeError: 'NoneType' object has no attribute '_jvm'

由于您正试图在循环中建立连接,因此需要花费大量的时间

from pyspark.sql.functions import lit
rows = df.count()
summary = df.describe().filter(col(variable) == "count")
summary.select(*((lit(rows)-col(c)).alias(c) for c in df.columns)).show()
您可以使用此列而不是column.isnull.sum,因为它需要很长时间


编辑:请使用SQLAlchemy查询数据库以获取每个变量的计数。一次完成是一个不错的选择。

您应该能够执行column.isnull.sum,而不是对每一列都执行此操作,让我试试。非常感谢。谢谢,如果出现问题,请告诉我。我得到了这个AttributeError:“NoneType”对象没有属性“\u jvm”你知道为什么吗?请用导致错误的完整代码更新问题,并发布错误代码。我需要看看您是如何使用udf的。您好,对不起,最后一次您能告诉我order\u pk=pandas。请阅读\u sql\u query'select*from dbo.ORDERS%%,con=cnxn,而不是一列查询表中的所有列,并让我知道它花费的时间和行数。