python - 在 python 或 spark 中获取大数据缺失值的最快方法是什么?
问题描述
我正在处理几个数据表,它们有超过 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'
解决方案
由于您试图在循环中建立连接,因此需要花费大量时间。
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 查询数据库以获取每个变量的计数。一下子是不错的选择。
推荐阅读
- java - 数组的初始化
- html - 使用媒体查询的响应式页脚
- javascript - 如何使用 JavaScript 将文件读取到 WebAssembly?
- java - 这些java线程是否在等待它获得的锁?
- java - vs 代码中的输出窗口是不可编辑的,那么当程序要求输入时我们如何输入呢?
- docker - 为什么每次运行特定查询时 pyodbc 都会为特定数据点返回 SSL 错误消息?
- python - IndexError:元组索引超出范围。访问特定行中的列
- ios - 以编程方式在屏幕上执行点击
- python - 如何将结果存储在for循环中
- c# - Asp.Net 核心 | 扩展 windows auth 身份对象