2016-05-18 10 views
0

私はspark-shellで次のクエリを呼び出します。Spark-CSV sqlContextに関する問題

sqlContext.sql("select cast(ts_time as varchar(10)),cast(y as varchar(10)),cast('0' as varchar(3)),case when x0 = '' then cast(null as float) else cast(x0 as float) end from tasmaxload UNION ALL 
select cast(ts_time as varchar(10)),cast(y as varchar(10)),cast('1' as varchar(3)),case when x1 = '' then cast(null as float) else cast(x1 as float) end from tasmaxload").registerTempTable("testcast"); 

これは、一部の場所では、閉じられていない文字列リテラルをスローします。

私は、クエリが次のように1行で与えられれば、エラーはなく、正常に実行されることを理解しました。

sqlContext.sql("select cast(ts_time as varchar(10)),cast(y as varchar(10)),cast('0' as varchar(3)),case when x0 = '' then cast(null as float) else cast(x0 as float) end from tasmaxload UNION ALL select cast(ts_time as varchar(10)),cast(y as varchar(10)),cast('1' as varchar(3)),case when x1 = '' then cast(null as float) else cast(x1 as float) end from tasmaxload").registerTempTable("testcast"); 

ただし、1行にすることなくこの問題を管理できる方法はありますか?

元のクエリが150以上の行に分割されており、常に1行に変更し続けることができないため、これを尋ねます。

誰かがこれで私を助けることができますか? FYI

私もを使用してみました:モードを貼り付けます。

ありがとうございます。

答えて

0

ごめんなさい。

この質問はフォーラムでalready answeredです。問題は次のように二重引用符を3倍にするために、単一の二重引用符を変更することで解決します

、これはあまりにも他の誰かに役立ちます

sqlContext.sql("""select cast(ts_time as varchar(10)),cast(y as varchar(10)),cast('0' as varchar(3)),case when x0 = '' then cast(null as float) else cast(x0 as float) end from tasmaxload UNION ALL 
select cast(ts_time as varchar(10)),cast(y as varchar(10)),cast('1' as varchar(3)),case when x1 = '' then cast(null as float) else cast(x1 as float) end from tasmaxload""").registerTempTable("testcast"); 

希望。ありがとうございました。