私は自分の会社のワークフローを作成しています。したがって、何かをフィルタリングするためにSpark SQLのcase文を使用する必要があります。spark SQLのcase文
私はOPP_amount_euroという名前の列を持っています(何かに使われた金額がそこに保存されています)。OPP_amount_euro_binnedという列があります(デフォルト値は1です)。 私はある種の間隔をプログラムしたいと思います。 OPP_amount_euroの値が< 30000の場合、OPP_amount_euro_binnedの値は1でなければなりません。
私は既に解決策を見つけようとしましたが、それは最良の解決策ではありません。
select
case when OPP_amount_eur < 30000 then 1
when OPP_amount_eur >= 30000 then 2
when OPP_amount_eur >= 50000 then 3
when OPP_amount_eur >= 100000 then 4
when OPP_amount_eur >= 300000 then 5
when OPP_amount_eur >= 500000 then 6
when OPP_amount_eur >= 1000000 then 7
end as OPP_amount_eur_binned
from inputTable
ので、このコードがうまく機能しているが、私は、テーブル内の任意の更なる列を選択can't。私が選択した後に「*」を記述する場合、私はエラーメッセージを以下取得します:処理中
から例外:はParseException:不一致入力「とき」期待{、」、 『『FROM』、『WHERE』、』 (2行目)(2行目、2行目、2行目、2行目、2行目、2行目、2行目、3行目) OPP_amount_eur> = 30000の場合は1 ----- ^^^ OPP_amount_eur> = 50000の場合は2、OPP_amount_eur> = 100000の場合は3、OPP_amount_eur> OPP_amount_eur_binnedよう= 300000次いで5ときOPP_amount_eur> = 500000次いで6場合OPP_amount_eur> = 1000000次に7端temptable3083b308bcec4124b6a4650f2bb40695
なぜ私はこれをすることができないのですか? 私はそれをインターネット上で検索しました。通常のSQLでは動作しているように見えますが、なぜこれはSpark SQLでは不可能ですか? 解決策はありますか?
私の悪い記述には申し訳ありませんが、私はここで絶対に新しいですし、私はスパークSQLと接触したこともありませんでした。 私は学生として私の訓練に就いています。
のためのソリューションです...'。 (ANSI SQLの方法です) – jarlh
ところで、それは 'case' _expression_、not文です。 – jarlh
ご返信ありがとうございます。あなたのようにコードを変更しましたが、別の問題があります。新しい列OPP_amount_eur_binnedは追加されますが、「1」と「2」でのみ埋められます。たとえば、私はOPP_amount_eurの列に132917.94の値を持っていて、correspondigの請求された列は2の値を持っています...それは100,000よりも大きいので、通常は値 '4'を取得する必要があります。働いていない? – mafin