私は、このオンライン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"],.......
をデモDSは、これらの構造化されたクラスの集合で構成されています。 TestPerson(フィールド(0)、フィールド(1)...)は、TestClass(フィールド(0)、フィールド(1).....)でなければなりません - TestPersonは決して定義されていません。 – lezdangerous
ありがとうございます。私はここでケースクラスを利用して修正を行った。 –