2017-03-08 11 views
0

に基づいて複数の列にスパークSQL分割文字列私は100000行の1列を持つスパークデータフレームTABLE1を持ってそれぞれが同じ長さSparklyR /刺されの数/文字数

AA105LONDEN 03162017045262017 16953563ABCDEF 

の文字列が含まれていますし、私なり白いスペースを別の列として含む下に分離された行に基づいて、各行を複数の列に分割するのが好きです。

AA|105|LONDEN| |0316|2017|04526|2017| |1695|3563|ABCDEF 

は現在、私は次のようになります。そのコードと同じようにDBIパッケージを使用しようとしています:

library(DBI) 

newdataframe <- dbGetQuery(sc,"INSERT INTO TABLE2 
(COLUMN1, COLUMN2, COLUMN3, COLUMN4) 
    SELECT SUBSTR(TRIM(COLUMN_NAME),1,3), 
      SUBSTR(TRIM(COLUMN_NAME),4,8), 
      SUBSTR(TRIM(COLUMN_NAME),9,12), 
      SUBSTR(TRIM(COLUMN_NAME),12,15) 
    FROM TABLE1 
    WHERE COLUMN_NAME IS NOT NULL") 

私は、それぞれの文字列が含まれている100000行の1列を持つスパークデータフレームTABLE1を持っています同じ長さ

AA105LONDEN 03162017045262017 16953563ABCDEF 

と私は別々の列として空白を含む下に分離線に基づいて複数の列に各行を分離したいです。

AA|105|LONDEN| |0316|2017|04526|2017| |1695|3563|ABCDEF 

現在、私は次のようなコードのようにDBIパッケージを使用しようとしています:

library(DBI) 

newdataframe <- dbGetQuery(sc,"INSERT INTO TABLE2 
(COLUMN1, COLUMN2, COLUMN3, COLUMN4) 
    SELECT SUBSTR(TRIM(COLUMN_NAME),1,3), 
      SUBSTR(TRIM(COLUMN_NAME),4,8), 
      SUBSTR(TRIM(COLUMN_NAME),9,12), 
      SUBSTR(TRIM(COLUMN_NAME),12,15) 
    FROM TABLE1 
    WHERE COLUMN_NAME IS NOT NULL") 

しかしこれは動作するようには思えません。さらに、Rデータフレームを返しても、スパークデータフレームで動作する必要があります。私は、SQL以外の代替提案や、sparkで動作し、解析されたSparkデータフレームを返す適切な構文を探しています。何か案は。

ありがとうございます。

答えて

1

これは、Dataframeを作成するために使用します。正しい結果が得られます。

sqlContext.sql("select substr(COLUMN_NAME,1,2), 
substr(COLUMN_NAME,3,3), 
substr(COLUMN_NAME,6,6), 
substr(COLUMN_NAME,12,4), 
substr(COLUMN_NAME,16,4), 
substr(COLUMN_NAME,20,4), 
substr(COLUMN_NAME,24,5) , 
substr(COLUMN_NAME,29,4) , 
substr(COLUMN_NAME,33,1) , 
substr(COLUMN_NAME,34,4) , 
substr(COLUMN_NAME,38,4) , 
substr(COLUMN_NAME,42,6) 
TABLE1 
WHERE COLUMN_NAME IS NOT NULL") 
関連する問題