2017-04-20 6 views
3

基本的に、私はSQLステートメントを使用して簡単な削除をしたいと思ったが、私は、SQLスクリプトを実行するとき、それは次のようなエラー私をスロー:Sparkデータフレームから作成されたテーブルの行を削除するには?

pyspark.sql.utils.ParseException: u"\nmissing 'FROM' at 'a'(line 2, pos 23)\n\n== SQL ==\n\n DELETE a.* FROM adsquare a \n-----------------------^^^\n"

これらは、私が使用しているスクリプトです:

sq = SparkSession.builder.config('spark.rpc.message.maxSize','1536').config("spark.sql.shuffle.partitions",str(shuffle_value)).getOrCreate() 
adsquare = sq.read.csv(f, schema=adsquareSchemaDevice , sep=";", header=True) 
adsquare_grid = adsqaureJoined.select("userid", "latitude", "longitude").repartition(1000).cache() 
adsquare_grid.createOrReplaceTempView("adsquare") 

sql = """ 
    DELETE a.* FROM adsquare a 
    INNER JOIN codepoint c ON a.grid_id = c.grid_explode 
    WHERE dis2 > 1 """ 

sq.sql(sql) 

:実行中にコードポイントテーブルが作成されます。

上記の条件で行を削除する方法はありますか?

+2

Sparkでは、すべてのデータ抽象は不変です。興味のないフィールドを除外したUr新規データDFを作成するためにUDFを持っている必要があります。 – BDR

+0

UDFはこの単純なタスクには高価すぎる –

答えて

3

データフレームから行を削除することはできません。ただし、不要なレコードを除外する新しいデータフレームを作成することはできます。

sql = """ 
    Select a.* FROM adsquare a 
    INNER JOIN codepoint c ON a.grid_id = c.grid_explode 
    WHERE dis2 <= 1 """ 

sq.sql(sql) 

このようにして、新しいデータフレームを作成できます。ここでは逆の条件を使用しました。dis2 <= 1

0

Hadoopがに従うので、行を削除することはできません代わりに、SQLステートメントで削除されたレコードをフィルタリングして新しいデータフレームを得ることができます。

2

Apache Sparkのデータフレームは不変です。それを変更することはできません。データフレームから行を削除するには、不要な行をフィルタリングして別のデータフレームに保存します。

関連する問題