我的发展环境:
依赖关系:
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core_2.10 -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>2.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-mllib_2.10 -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.10</artifactId>
<version>2.2.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql_2.10 -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.10</artifactId>
<version>2.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.scala-lang/scala-library -->
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.10.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.scala-lang/scala-reflect -->
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-reflect</artifactId>
<version>2.10.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.4</version>
</dependency>
</dependencies>
问题:
我想将远程csv文件读入数据帧
我接下来试过了:
val weburl = "http://myurl.com/file.csv"
val tfile = spark.read.option("header","true").option("inferSchema","true").csv(weburl)
它返回下一个错误:
Exception in thread "main" java.io.IOException: No FileSystem for scheme: http
我在网上搜索后尝试了下一步(包括stackoverflow)
val content = scala.io.Source.fromURL(weburl).mkString
val list = content.split("\n")
//...doing something to string and typecase, seperate each lows to make dataframe format.
它运行正常,但我认为加载Web源csv文件更加智能 有没有办法让DataframeReader可以读取HTTP csv?
我认为设置SparkContext.hadoopConfiguration是一些关键,所以我在互联网上尝试了很多代码。但它没有工作,我不知道如何设置和代码行的每个含义。
接下来是我的尝试之一,它没有工作。(访问&#34; http&#34;相同的错误信息)
val sc = new SparkContext(spark_conf)
val spark = SparkSession.builder.appName("Test").getOrCreate()
val hconf = sc.hadoopConfiguration
hconf.set("fs.hdfs.impl", classOf[org.apache.hadoop.hdfs.DistributedFileSystem].getName)
hconf.set("fs.file.impl", classOf[org.apache.hadoop.fs.LocalFileSystem].getName)
hconf.set("fs.file.impl", classOf[org.apache.hadoop.fs.LocalFileSystem].getName)
设定这是关键吗?或不? 或者DataframeReader无法直接从远程源读取?我怎么能这样做? 我需要为http格式导入一些特殊的库吗?
我想知道的事情:
有没有办法让dataframereader可以读取HTTP源?
不使用自己的解析数据。 (例如 Best way to convert online csv to dataframe scala。)
我需要阅读CSV格式。 CSV是正式格式。我认为更通用的方式来读取像dataframereader.csv("local file"
)这样的数据。
我知道这个问题太低了。对不起,我的理解水平很低。
答案 0 :(得分:5)
据我所知,无法直接读取HTTP数据。您可以做的最简单的事情是使用# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres trust
#host replication postgres 127.0.0.1/32 trust
#host replication postgres ::1/128 trust
下载文件,但它会将数据复制到每个工作人员:
$ ls -la /var/run/postgresql/
total 4
drwxrwsr-x 2 postgres postgres 80 Sep 7 19:52 .
drwxr-xr-x 18 root root 560 Sep 7 16:22 ..
srwxrwxrwx 1 postgres postgres 0 Sep 7 19:52 .s.PGSQL.5432
-rw------- 1 postgres postgres 69 Sep 7 19:52 .s.PGSQL.5432.lock
就我个人而言,我只是提前下载文件并放入分布式存储。