我有一个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()