2016-10-30 20 views
0

私はspark Rで作業しています。既存の列の文字列変更に基づいてSparkDataFrameに列を追加したいと思います。次のSparkDataFrameを検討してください。SQL式のセットを使用してSparkDataFrameに列を追加する方法は?

head(df) 
    id             address 
    1 street_X, postal_code_X, neighborhood_X, county_name_X 
    2       neighborhood_Y, county_name_Y 
    3    postal_code_Z, neighborhood_Z, county_name_Z 

近隣のみを含む列を追加する必要があります。私は新しいSparkDataFrameに次のようにこの列を抽出するための管理:

new_df <- selectExpr(df, "SUBSTRING_INDEX(address, ',', -2) AS neighborhood") 
new_df <- selectExpr(new_df, "SUBSTRING_INDEX(neighborhood, ',', 1) AS neighborhood") 

head(new_df) 

neighborhood 
neighborhood_X 
neighborhood_Y 
neighborhood_Z 

しかし、私は、元のDFにこのコラム周辺を追加する方法(等価はRでCBINDするには/私はwithColumnをチェックし、それを組み合わせて管理していませんでしたselectExprで)?

+0

ことができるかもしれない

new_df <- selectExpr(df, "id", "address", "SUBSTRING_INDEX(SUBSTRING_INDEX(address, ',', -2), ',', 1) AS neighborhood") 

他の列を選択し、この

のようなものを試してみてくださいあなたは、JOINコマンドを試したことがありますか?選択は列のサブセットを選択し、新しいものを追加しないプロジェクションです –

+0

ありがとう、あなたはjoin(df、df_new)を意味しますか? spark.sql.crossJoin.enabledをtrueに設定する必要があることを示すRBackendHandlerエラーが表示されます(デカルト結合は高価になる可能性があり、デフォルトでは無効になっています)。私はこれを行う方法を確認する必要があります。 – kanimbla

+1

実際、それは気にしない...なぜ同じ選択内でSUBSTRINGを2回呼び出すことができないのですか? –

答えて

2

ただ、これも

new_df <- selectExpr(df, "*", 
    "SUBSTRING_INDEX(SUBSTRING_INDEX(address, ',', -2), ',', 1) AS neighborhood") 
+0

ありがとう!次のエラーが表示されます。invokeJavaのエラー(isStatic = FALSE、objId $ id、methodName、...):org.apache.spark.sql.catalyst.parser.ParseException:無関係な入力... – kanimbla

+0

括弧。私は携帯電話にいる –

+0

実際には、私は今でも携帯電話に乗っているので、2時間後に確認します。一見すると、括弧がうまく見えますが。 – kanimbla

関連する問題