2017-07-18 17 views
0

私は、このオンラインcsvファイルをScalaのデータフレームに入れるのに最も効率的な方法を見つけようとしています。ダウンロードを保存するにはオンラインcsvをデータフレームスカラーに変換する最も良い方法

は、コード内のcsvファイルは次のようになります。私の研究から

"Symbol","Name","LastSale","MarketCap","ADR 
TSO","IPOyear","Sector","Industry","Summary Quote" 
"DDD","3D Systems Corporation","18.09","2058834640.41","n/a","n/a","Technology","Computer Software: Prepackaged Software","http://www.nasdaq.com/symbol/ddd" 
"MMM","3M Company","211.68","126423673447.68","n/a","n/a","Health Care","Medical/Dental Instruments","http://www.nasdaq.com/symbol/mmm" 
.... 

、私はあなたがすることができないので(CSVをダウンロードして起動すると、リストバッファにそれを置きます

import scala.collection.mutable.ListBuffer 

val sc = new SparkContext(conf) 

var stockInfoNYSE_ListBuffer = new ListBuffer[java.lang.String]() 


import scala.io.Source 
    val bufferedSource = 
    Source.fromURL("http://www.nasdaq.com/screening/companies-by- 
    industry.aspx?exchange=NYSE&render=download") 

for (line <- bufferedSource.getLines) { 
    val cols = line.split(",").map(_.trim) 

    stockInfoNYSE_ListBuffer += s"${cols(0)},${cols(1)},${cols(2)},${cols(3)},${cols(4)},${cols(5)},${cols(6)},${cols(7)},${cols(8)}" 

} 
bufferedSource.close 

val stockInfoNYSE_List = stockInfoNYSE_ListBuffer.toList 

リストがありますので、リストでこれを行います。基本的には次のように各値を取得することができます:

// SYMBOL : stockInfoNYSE_List(1).split(",")(0) 
// COMPANY NAME : stockInfoNYSE_List(1).split(",")(1) 
// IPOYear : stockInfoNYSE_List(1).split(",")(5) 
// Sector : stockInfoNYSE_List(1).split(",")(6) 
// Industry : stockInfoNYSE_List(1).split(",")(7) 

ここで、私はこれをデータフレームにどのようにして得ますか?私が取った間違ったアプローチ。私はまだすべての価値を入れていませんでした - 単純なテストでした。

case class StockMap(Symbol: String, Name: String) 
val caseClassDS = Seq(StockMap(stockInfoNYSE_List(1).split(",")(0), 
StockMap(stockInfoNYSE_List(1).split(",")(1))).toDS() 

caseClassDS.show() 

上記のアプローチの問題点:1つのシーケンス(行)をハードコードして追加する方法しかわかりません。リストのすべての行が必要です。

私の第二未遂:

val sqlContext= new org.apache.spark.sql.SQLContext(sc) 
import sqlContext.implicits._ 
val test = stockInfoNYSE_List.toDF 

これはちょうどあなたの配列を与えるだろう、と私は値を分割します。

Array(["Symbol","Name","LastSale","MarketCap","ADR TSO","IPOyear","Sector","Industry","Summary Quote"], ["DDD","3D Systems Corporation","18.09","2058834640.41","n/a","n/a","Technology","Computer Software: Prepackaged Software","http://www.nasdaq.com/symbol/ddd"], ["MMM","3M Company","211.68","126423673447.68","n/a","n/a","Health Care","Medical/Dental Instruments","http://www.nasdaq.com/symbol/mmm"],....... 

答えて

0
case class TestClass(Symbol:String,Name:String,LastSale:String,MarketCap :String,ADR_TSO:String,IPOyear:String,Sector: String,Industry:String,Summary_Quote:String 
    |) 
defined class TestClass 

var stockDF= stockInfoNYSE_ListBuffer.drop(1) 

val demoDS = stockDF.map(line => { 
    val fields = line.replace("\"","").split(",") 
    TestClass(fields(0), fields(1), fields(2),fields(3), fields(4), fields(5),fields(6), fields(7), fields(8)) 
}) 

scala> demoDS.toDS.show 

+------+--------------------+--------+---------------+-------------+-------+-----------------+--------------------+--------------------+ 
|Symbol|    Name|LastSale|  MarketCap|  ADR_TSO|IPOyear|   Sector|   Industry|  Summary_Quote| 
+------+--------------------+--------+---------------+-------------+-------+-----------------+--------------------+--------------------+ 
| DDD|3D Systems Corpor...| 18.09| 2058834640.41|   n/a| n/a|  Technology|Computer Software...|http://www.nasdaq...| 
| MMM|   3M Company| 211.68|126423673447.68|   n/a| n/a|  Health Care|Medical/Dental In...|http://www.nasdaq...| 
+0

をデモDSは、これらの構造化されたクラスの集合で構成されています。 TestPerson(フィールド(0)、フィールド(1)...)は、TestClass(フィールド(0)、フィールド(1).....)でなければなりません - TestPersonは決して定義されていません。 – lezdangerous

+0

ありがとうございます。私はここでケースクラスを利用して修正を行った。 –

0

誰が働いてこの例を取得しようとしている場合は、ここでのコードは、上記の溶液使用している:あなたは、本質的にすべての行を取り、それをマッピングし、私はそれを得る

val sqlContext = new org.apache.spark.sql.SQLContext(sc) 

import scala.collection.mutable.ListBuffer 
import sqlContext.implicits._ 

var stockInfoNYSE_ListBuffer = new ListBuffer[java.lang.String]() 

import scala.io.Source 
    val bufferedSource = 
    Source.fromURL("http://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=NYSE&render=download") 

for (line <- bufferedSource.getLines) { 
    val cols = line.split(",").map(_.trim) 

    stockInfoNYSE_ListBuffer += s"${cols(0)},${cols(1)},${cols(2)},${cols(3)},${cols(4)},${cols(5)},${cols(6)},${cols(7)},${cols(8)}" 

} 
bufferedSource.close 



case class TestClass(Symbol:String,Name:String,LastSale:String,MarketCap :String,ADR_TSO:String,IPOyear:String,Sector: String,Industry:String,Summary_Quote:String) 

var stockDF= stockInfoNYSE_ListBuffer.drop(1) 

val demoDS = stockDF.map(line => { 
    val fields = line.replace("\"","").split(",") 
    TestClass(fields(0), fields(1), fields(2),fields(3), fields(4), fields(5),fields(6), fields(7), fields(8)) 
}) 

demoDS.toDF().show 
関連する問題