2016-10-07 21 views
1

私はpysparkを初めて使い、奇妙な問題に直面しています。私はCSVデータセットをロードしている間、いくつかの列をnull値に設定しようとしています。私は非常に小さなデータセット(test.csv)と私の場合を再現することができますpyspark:StructField(...、...、False)は、常にnullable = trueを返します。

col1,col2,col3 
11,12,13 
21,22,23 
31,32,33 
41,42,43 
51,,53 

あり、行5、列2でのNULL値があると私は私のDFの内側に、その行を取得する必要はありません。すべてのフィールドをnull不可能なフィールド(nullable=false)に設定しましたが、私はnullable=trueを持つ3つの列すべてを持つスキーマを取得します。これは、3つの列をすべてnull以外の値に設定しても発生します。 Spark 2.0.1の最新バージョンを使用しています。

:私はこれを期待しながら、

+----+----+----+ 
|col1|col2|col3| 
+----+----+----+ 
| 11| 12| 13| 
| 21| 22| 23| 
| 31| 32| 33| 
| 41| 42| 43| 
| 51|null| 53| 
+----+----+----+ 

from pyspark.sql import SparkSession 
from pyspark.sql.functions import * 
from pyspark.sql.types import * 

spark = SparkSession \ 
    .builder \ 
    .appName("Python Spark SQL basic example") \ 
    .config("spark.some.config.option", "some-value") \ 
    .getOrCreate() 

struct = StructType([ StructField("col1", StringType(), False), \ 
         StructField("col2", StringType(), False), \ 
         StructField("col3", StringType(), False) \ 
        ]) 

df = spark.read.load("test.csv", schema=struct, format="csv", header="true") 

df.printSchema()リターン:

root 
|-- col1: string (nullable = true) 
|-- col2: string (nullable = true) 
|-- col3: string (nullable = true) 

df.show()戻ります。ここ

コードです

答えて

4

スパークの動作(ここではFalseからTrueへの切り替えは混乱していますが、ここでは基本的には間違ったことはありません。 nullable引数は制約ではなく、特定のタイプの最適化を可能にするソースとタイプのセマンティクスを反映しています。

データにNULL値を避けたいとします。このためにはna.dropメソッドを使用する必要があります。ヌルを処理する他の方法については

df.na.drop() 

ドキュメント(DataFrame.naプロパティを使用して露光)DataFrameNaFunctionsをご覧ください。

CSV形式ではデータ制約を指定できるツールは提供されていないため、読者は入力がnullではなく、実際にデータがNULLを含むと仮定することはできません。

関連する問題