我正在尝试使用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之前对其进行预处理,这样我可以确定它只包含“好”数据吗? 感谢任何帮助/见解。
答案 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)
然后没有问题。