使用Sparklyr一起收集许多Spark表

时间:2018-07-25 23:36:24

标签: r apache-spark sparklyr

我有一个R脚本,它将抓取目录并收集文件并将每个文件写入Spark表。我还有另一个应用程序可以创建.txt文件,该文件只是每个文本文件中的一列。该脚本将获取每个文本文件并创建一个Spark表。我现在想收集每个表,并基本上将它们绑定在一起。我唯一要注意的就是这些表,因此我不必担心收集我想要的表以外的其他表。

我以为我可以简单地列出所有表并使用sdf_bind_cols()进行绑定。这是一个例子。

df<-src_tbls(sc)
final_table<-sdf_bind_cols(df[1])

我认为这会抢走他们的全部并将它们变成一张桌子,但是会崩溃。我可以打开localhost:4040并查看每个文本文件中的所有表,但是不能使用

将它们收集为一个表
df<-src_tbls(sc)
final_table<-sdf_bind_cols(df[1])

它崩溃了。有人可以告诉我如何将所有Spark表收集在一起并按列进行绑定吗?

下面用来抓取目录的脚本。

app.dir <-setwd("C:\\Users\\jhwat\\Documents\\Spark") #Set working Directory
spark.dir <- file.path(app.dir, "spark-2.3.1-bin-hadoop2.7") #Spark must be 
in the same working directory as application.

Sys.setenv(SPARK_HOME = spark.dir) #Set Environment
.libPaths(c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib"), 
.libPaths()))#Set Spark library path.

# Load SparkR library's into your R session
#library(SparkR, file.path(spark.dir, "\\R\\lib\\SparkR"))#Optional, only if 
you are using SparkR directly.

library(rsparkling)
library(sparklyr)
library(h2o)

sc <- spark_connect("local[8]", spark_home = Sys.getenv("SPARK_HOME"), 
                config = conf,
                #version = "2.3.1", 
                #hadoop_version = NULL,
                app_name = "sparklyr")

#######################Native R, Crawl directory for text files and list them
Get_Files <- function(Parent_Directory, Include_Paths) {
# Function to list all files in a directory, including files in
# sub-directories.
require(stringi)
File_Path <- as.data.frame(unlist(list.dirs(Parent_Directory)))
File_Path <- as.data.frame(unlist(apply(File_Path, 1, function(x) 
stri_replace_all_fixed(x,"/", "/"))))
Files_RPT <- as.data.frame(unlist(apply(File_Path, 1, function(x) 
list.files(path = x,

include.dirs = FALSE, full.names = Include_Paths))))
Files <- apply(Files_RPT, 1, function(x) stri_replace_all_fixed(x,"/", "/"))
Files <- lapply(Files, function(x) stri_replace_all_fixed(x, "C:", ""))
print(paste("Total Files - ", length(Files)))
return(Files)
}

Parent_Directory <- c("C:/Users/jhwat/Documents/Spark/testfiles")#Specify 
parent directory.
path_s<-unlist(Get_Files(Parent_Directory, Include_Paths=TRUE))
name_s<-unlist(Get_Files(Parent_Directory, Include_Paths=FALSE))
invisible(lapply(1:length(path_s), function(i,name=name_s, path=path_s) {
name<-stri_replace_all_fixed(name, '.txt', '')
spark_read_text(sc, 
name= name[i],
path= paste(path[i]), 
repartition = 0, 
memory = FALSE,
overwrite = TRUE)
}))

df<-src_tbls(sc)
sdf_bind_cols(df[1])

spark_disconnect_all()

0 个答案:

没有答案