apache-spark - 使用 spark_read_csv() 从 Rstudio Server 中的 Azure Blob 存储读取 CSV 文件
问题描述
我在 Spark 2.2 上使用 Java 8 HDI 3.6 预配了 Azure HDInsight 群集类型 ML Services (R Server)、操作系统 Linux、ML Services 9.3 版本。
在 Rstudio Server 中,我试图从我的 blob 存储中读取 csv 文件。
Sys.setenv(SPARK_HOME="/usr/hdp/current/spark-client")
Sys.setenv(YARN_CONF_DIR="/etc/hadoop/conf")
Sys.setenv(HADOOP_CONF_DIR="/etc/hadoop/conf")
Sys.setenv(SPARK_CONF_DIR="/etc/spark/conf")
options(rsparkling.sparklingwater.version = "2.2.28")
library(sparklyr)
library(dplyr)
library(h2o)
library(rsparkling)
sc <- spark_connect(master = "yarn-client",
version = "2.2.0")
origins <-file.path("wasb://MYDefaultContainer@MyStorageAccount.blob.core.windows.net",
"user/RevoShare")
df2 <- spark_read_csv(sc,
path = origins,
name = 'Nov-MD-Dan',
memory = FALSE)```
当我运行它时,我收到以下错误
Error: java.lang.IllegalArgumentException: invalid method csv
for object 235
at sparklyr.Invoke$.invoke(invoke.scala:122)
at sparklyr.StreamHandler$.handleMethodCall(stream.scala:97)
at sparklyr.StreamHandler$.read(stream.scala:62)
at sparklyr.BackendHandler.channelRead0(handler.scala:52)
at sparklyr.BackendHandler.channelRead0(handler.scala:14)
at
io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleCh annelInboundHandler.java:105)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:244)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:846)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)
at java.lang.Thread.run(Thread.java:748)
任何帮助都是极好的!
解决方案
路径origins
应指向 CSV 文件或 CSV 目录。你确定它origins
指向一个文件目录还是一个文件?对于每个 HDFS 用户,通常至少还有一个目录/user/RevoShare/
,即/user/RevoShare/sshuser/
.
这是一个可能有帮助的例子:
sample_file <- file.path("/example/data/", "yellowthings.txt")
library(sparklyr)
library(dplyr)
cc <- rxSparkConnect(interop = "sparklyr")
sc <- rxGetSparklyrConnection(cc)
fruits <- spark_read_csv(sc, path = sample_file, name = "fruits", header = FALSE)
您可以使用RxHadoopListFiles("/example/data/")
或使用hdfs dfs -ls /example/data
来检查 HDFS / Blob 上的目录。
!
推荐阅读
- token - 如何在 solana Web3 中获取 Token 计数
- python - 在新终端中从 python 启动 vim 并等待它关闭
- python - 从基于前一阶段的 go 图像复制 go 包?
- node.js - NestJS Postgres Prisma - 错误类型'字符串'不可分配给参数类型'TemplateStringsArray | Sql'
- ios - 如何为 UIButton 设置 UIBackgroundConfiguration?
- django - 使用 Nginx 部署在云服务器上时,奇怪的 Django 和 Angular “不存在‘Access-Control-Allow-Origin’标头”
- rabbitmq - 阅读一些插件时出现问题:duplicate_plugin
- java - 由 android.content.res.Resources$NotFoundException: Drawable (missing name) with resource ID 即使资源在那里
- python - Plotly - 在循环中生成数字;将所有图形放在单个子图中
- haskell - 创建一个函数 ved 仅使用递归删除列表中最大项目的最后一次出现