pyspqrk sql hive表中的错误数据

时间:2017-01-27 16:24:06

标签: apache-spark hive pyspark apache-spark-sql pyspark-sql

我正在尝试使用Pyspark中有25亿条记录的Hive表。 我假设表中存在一些格式错误或其他方面“坏”的数据。 我使用spark版本1.6.2与python版本2.6.6:

from pyspark import SparkContext, SparkConf
from pyspark.sql import HiveContext
with SparkContext() as sc:
    tbl = “mydb.mytable”
    hc = HiveContext(sc)
    df = hc.table(tbl)

阅读表格。 如果我试图运行

    df.take(5)

我遇到了ValueError异常,并且

    df.count() 

无限期挂起。 但是,如果我用以下表格对表格进行抽样:

    dfsamp = df.sample(False, 0.0000001, 42)

我得到一个大约220行的数据帧,这似乎没有任何问题。 从Hive CLI访问完整表似乎工作正常。我假设有一些记录,Spark出于某种原因无法处理。 我想知道在将其作为pyspark数据帧加载后是否有某种方法来过滤Hive表,这样只剩下“好”行。或者,有什么方法可以在将Hive表加载到pyspark之前对其进行预处理,这样我可以确定它只包含“好”数据吗? 感谢任何帮助/见解。

1 个答案:

答案 0 :(得分:1)

原来,日期列中有些日期超出范围。

如果我使用

加载数据框
df = hc.sql("""
SELECT *
  FROM {0}
  WHERE date_col_1 BETWEEN '1970-01-01' AND '2029-12-31'
    AND date_col_2 BETWEEN '1970-01-01' AND '2029-12-31'
.
.
.
""".format(tbl)

然后没有问题。