2017-09-10 9 views
0

私は3列のpysparkデータフレームを持っています。 ハイブテーブル 'test1'のDDLはすべて文字列データ型です。私はdf.printSchemaを行う場合は、以下に示すよう だから、すべては今、私は「C2」列に整数型であるレコードだけをフィルタリングするpysparkデータフレームの列のデータ型の妥当性確認

>>> df = spark.sql("select * from default.test1") 
>>> df.printSchema()                                          
root                                              
|-- c1: string (nullable = true)                                    
|-- c2: string (nullable = true)                                   
|-- c3: string (nullable = true) 

+----------+--------------+-------------------+                             
|c1  |c2   |c3     |                             
+----------+--------------+-------------------+                             
|April  |20132014  |4     |                             
|May  |20132014  |5     |                             
|June  |abcdefgh  |6     |                             
+----------+--------------+-------------------+ 

、文字列データ型です。 基本的に、最初の2つのレコードは、 '20132014'のような整数型です。他のレコードは除外します。

df.withColumn("c2", df["c2"].cast("integer")).na.drop(subset=["c2"]) 

c2が有効な整数でない場合、それはNULLことと、後の工程で廃棄されます。一列に

答えて

0

タイプ

valid = df.where(df["c2"].cast("integer").isNotNull()) 
invalid = df.where(df["c2"].cast("integer").isNull()) 
を変更することなく、