SparklyR / Spark SQL根据咬合次数/字符数

时间:2017-03-08 03:25:34

标签: r apache-spark sparklyr r-dbi

我有一个火花数据帧TABLE1,其中一列有100000行,每行包含一个长度相同的字符串

 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")

我有一个火花数据帧TABLE1,其中一列有100000行,每行包含一个长度相同的字符串

 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数据帧,我需要它在spark数据帧中工作。我正在寻找一个替代建议,除了SQL或适用于spark的正确语法,并返回一个解析后的Spark数据帧然后我可以做ML。任何想法。

提前致谢。

1 个答案:

答案 0 :(得分: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")