dataframereader如何读取http?

use*_*221 3 scala intellij-idea hdfs apache-spark apache-spark-sql

我的发展环境:

  • 的IntelliJ
  • Maven的
  • Scala2.10.6
  • win7 x64

依赖关系:

 <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>
Run Code Online (Sandbox Code Playgroud)

问题:
我想将远程csv文件读入数据帧.
我试过下一个:

val weburl = "http://myurl.com/file.csv"
val tfile = spark.read.option("header","true").option("inferSchema","true").csv(weburl)
Run Code Online (Sandbox Code Playgroud)

它返回下一个错误:

Exception in thread "main" java.io.IOException: No FileSystem for scheme: http
Run Code Online (Sandbox Code Playgroud)

我在网上搜索后尝试了下一步(包括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.
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我认为加载web源csv文件更聪明的方法.
有没有办法让DataframeReader可以读取HTTP csv?

我认为设置SparkContext.hadoopConfiguration是一些关键,所以我在互联网上尝试了很多代码.但它不起作用,我不知道如何设置和代码行的每个含义.

接下来是我的尝试之一,它没有用.(访问"http"时出现相同的错误消息)

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)
Run Code Online (Sandbox Code Playgroud)

设定这是关键吗?或不?
或者DataframeReader无法直接从远程源读取?我怎么能这样做?
我需要为http格式导入一些特殊的库吗?

我想知道的事情:

有没有办法让dataframereader可以读取HTTP源代码?
不使用自己的解析数据.(喜欢将在线csv转换为dataframe scala的最佳方法.)
我需要阅读CSV格式.CSV是正式格式.我认为更通用的方式来读取数据dataframereader.csv("local file".

我知道这个问题的水平太低了.对于我的低级理解,我很抱歉.

hi-*_*zir 7

据我所知,不可能直接读取HTTP数据.您可以做的最简单的事情是使用下载文件SparkFiles,但它会将数据复制到每个工作者:

import org.apache.spark.SparkFiles

spark.sparkContext.addFile("http://myurl.com/file.csv")
spark.read.csv(SparkFiles.get("file.csv"))
Run Code Online (Sandbox Code Playgroud)

就个人而言,我只是提前下载文件并放入分布式存储.