在 python 或 spark 中获取大数据缺失值的最快方法是啥?

Posted

技术标签:

【中文标题】在 python 或 spark 中获取大数据缺失值的最快方法是啥?【英文标题】:What is the fastest way to get count of missing value for Big Data in python or spark?在 python 或 spark 中获取大数据缺失值的最快方法是什么? 【发布时间】:2018-09-14 12:48:06 【问题描述】:

我正在处理几个数据表,这些数据表有​​超过 2000 万行和 30 多列。 目前我正在使用 python pyspark 来计算 Null 值并计算缺失率。 但是一列检查需要 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'

【问题讨论】:

你应该能够做到column.isnull().sum()而不是对每一列都这样做 【参考方案1】:

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

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 查询数据库以获取每个变量的计数。一次性是不错的选择。

【讨论】:

让我试试。非常感谢。 谢谢,如果出现问题请告诉我。 我得到了这个 AttributeError: 'NoneType' object has no attribute '_jvm' 你知道为什么吗? 您能否使用导致错误的完整代码更新问题并发布错误代码。我需要看看你是如何使用 udf 的。 嗨,抱歉,最后一次你能告诉我order_pk = pandas.read_sql_query('select * from dbo.ORDERS' % , con=cnxn),而不是一列查询表中的所有列,让我知道它花费了多少时间和行数。

以上是关于在 python 或 spark 中获取大数据缺失值的最快方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

计算数据帧 Spark 中缺失值的数量

第2天Python实战Spark大数据分析及调度-RDD编程

第2天Python实战Spark大数据分析及调度-RDD编程

在 apache spark MLLib 中处理 SVM 中的缺失值

Python3实战Spark大数据分析及调度 (网盘分享)

spark数据清洗练习