Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R中的Spark将Double转换为Date_R_Apache Spark_Sparklyr - Fatal编程技术网

使用R中的Spark将Double转换为Date

使用R中的Spark将Double转换为Date,r,apache-spark,sparklyr,R,Apache Spark,Sparklyr,我有一个R数据帧,如下所示 Date@AD.CC_CC@AD.CC_CC.1@CL.CC_CC@CL.CC_CC.1 2018-02-05 -380 -380 -1580 -1580 2018-02-06 20 20 -280 -280 2018-02-07 -700 -700 -1730 -1730 2018-02-08 -460

我有一个R数据帧,如下所示

Date@AD.CC_CC@AD.CC_CC.1@CL.CC_CC@CL.CC_CC.1
2018-02-05      -380        -380     -1580       -1580
2018-02-06        20          20      -280        -280
2018-02-07      -700        -700     -1730       -1730
2018-02-08      -460        -460     -1100       -1100
2018-02-09       260         260     -1780       -1780
2018-02-12       480         480       380         380
我使用copy_to函数将数据帧复制到Spark。转换后,它将所有行转换为double

#来源:惰性查询[??x 5]
#数据库:spark_连接
日期AD_CC_CC AD_CC_CC_1 CL_CC_CC CL_CC_CC_1
17567     -380       -380    -1580      -1580
17568       20         20     -280       -280
17569     -700       -700    -1730      -1730
17570     -460       -460    -1100      -1100
17571      260        260    -1780      -1780
17574      480        480      380        380
我试图使用下面的命令将其转换回最新版本,但抛出了一个错误

marketdata_spark %>% mutate(Date = as.Date(Date))
Error: org.apache.spark.sql.AnalysisException: cannot resolve 'CAST(marketdata.`Date` AS DATE)' due to data type mismatch: cannot cast double to date; line 1 pos 59;

不知道该怎么办。

这看起来像是一个
错误。最简单的解决方法是在调用
copy\u to
之前将日期强制转换为字符:

df <- tibble::tibble(Date=as.Date(c("2018-02-05", "2018-02-06")))
sdf <- df %>% mutate(Date = as.character(Date)) %>% copy_to(sc, .)

sdf
#来源:惰性查询[??x1]
#数据库:spark_连接
日期
1 2018-02-05
2 2018-02-06
您还可以尝试使用该数值作为Unix纪元开始后的偏移量:

sdf <- df  %>% copy_to(sc, .)

sdf
#来源:惰性查询[??x1]
#数据库:spark_连接
日期
1 2018-02-05
2 2018-02-06
或者,您可以完全跳过
复制到
(它的应用程序非常有限,在生产中很少有用),并使用一种内置的输入格式(
spark\u read.*
)。

一种
sdf%>%变异(日期=日期添加(到日期(“1970-01-01”),日期))
非常棒。这对我来说非常有效。
sdf <- df  %>% copy_to(sc, .)

sdf