2017-09-07 7 views
1

私の開発環境:
のIntelliJ
Mavenの
Scala2.10.6
Win7のx64のdataframereaderはhttpをどのように読み取ることができますか?

依存性:

<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を設定することが重要な鍵だと思うので、インターネットで多くのコードを試しました。しかしそれはうまくいかず、私はコード行の設定方法と意味を知らない。次

私試みるの一つであり、それは動作しませんでした。(同じエラーメッセージが「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形式用の特別なライブラリをインポートする必要がありますか?私は
を知りたい

事がdataframereaderにどのような方法は、HTTPソースを読むことができますありますか?
独自の解析データを使用しないでください。 (Best way to convert online csv to dataframe scalaのように)
私はCSV形式を読む必要があります。 CSVは正式なフォーマットです。 dataframereader.csv( "ローカルファイル")のようなデータを読む一般的な方法だと思います。

私はこの質問レベルが低すぎると知っています。私は低レベルの理解には申し訳なく思っています。私は一週間それを掘り、私の時間が終わった..誰かが私を助ける..!

答えて

2

私が知る限り、HTTPデータを直接読み取ることはできません。おそらく、あなたがすることができる最も簡単な方法は、SparkFilesを使用してファイルをダウンロードすることですが、それは、各作業者にデータを複製します:

import org.apache.spark.SparkFiles 

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

は個人的に私はちょうど先行し、分散ストレージに入れたファイルをダウンロードしたいです。

+0

あなたのソリューションは非常にスマートです。ありがとうございました。 SparkFilesに感謝します – user1101221

関連する問題