2017-01-27 4 views
1

Pysparkで25億レコードのハイブテーブルを使用しようとしています。 テーブルに不正な形式のデータや何らかの形で「悪い」データがあるとします。 私は、Pythonのバージョン2.6.6でスパークバージョン1.6.2を使用しています:表を読むためにpyspqrk sqlハイブテーブルの不良データ

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が何らかの理由で処理できないレコードがいくつかあると仮定しています。 Hiveテーブルをpysparkデータフレームとしてロードした後で、「良い」行だけが残るようにフィルタリングする方法があるかどうかは疑問です。あるいは、Hiveテーブルをpysparkにロードする前に、それが "良い"データしか含んでいないことを確かめることができるような方法で、前処理できる方法がありますか? ヘルプ/洞察力を賞賛します。

+0

私はValueErrorに関する情報を提供していません。ここでは、return datetime.date.fromordinal(v + self.EPOCH_ORDINAL)ValueError:( '序数> = 1'、<関数 ... – crabmanbrian

+0

必要に応じて[編集]リンクを使用して質問を更新できます。 – user7337271

答えて

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) 

でデータフレームを読み込む場合は、何も問題はありません。

関連する問題