DataFramEreader如何读取HTTP



我的开发环境:

  • 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>

问题:
我想将远程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

我尝试了接下来的Internet搜索(包括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文件的更聪明的方法。
有什么方法可以读取HTTP CSV?

我认为设置SparkContext.HadoopConfiguration是一些关键,因此我在Internet中尝试了许多代码。但是它不起作用,我不知道如何设置代码行的每个含义。

接下来是我的尝试之一,它不起作用。(访问" 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)

设置这是关键吗?还是不是?
还是DataFramEreader无法直接从远程源读取?比我该怎么做?
我需要导入一些特殊库的http格式?

我想知道的事情

有什么方法可以读取http源吗?
不使用自己的解析数据。(就像将在线CSV转换为DataFrame Scala的最佳方法一样。)
我需要阅读CSV格式。CSV是正式格式。我认为更通用的方法是读取诸如dataframereader.csv("local file"的数据)。

我知道这个问题水平太低了。对我的低水平的理解感到抱歉。

据我所知,

无法直接读取HTTP数据。您可能要做的最简单的事情是使用SparkFiles下载文件,但它会将数据复制给每个工作人员:

import org.apache.spark.SparkFiles
spark.sparkContext.addFile("http://myurl.com/file.csv")
spark.read.csv(SparkFiles.get("file.csv"))

亲自下载文件并放入分布式存储中。

相关内容

  • 没有找到相关文章

最新更新