【问题标题】:How to load dataset from String in spark如何在火花中从字符串加载数据集
【发布时间】:2020-07-25 23:38:00
【问题描述】:

从 spark 的 document,我知道我可以从文件中的 libsvm-formatted 数据集加载。

但是,我想在远程 spark 集群中运行代码,所以我将 iris 数据集硬编码到我的代码中,并且我想直接从这个 String 对象加载。

但是,在查看 DataFrameReader 对象时,我发现没有支持从 String 直接加载数据集的 API。

【问题讨论】:

  • 嗨@calvin,你能检查我的答案吗,如果它适合你,请投票+接受:)
  • 嗨@SomeshwarKale,您的回答部分解决了我的问题,但是,我实际上想加载libsvm-formatted 数据集而不是csv-formatted 数据集
  • 嗨@calvin,如果您启用了文件系统,您可以从字符串 libsvm 创建临时文件并加载与 dataframe-val df = spark.read.format("libsvm") .option( "numFeatures", "780") .load("data/mllib/sample_libsvm_data.txt")
  • @SomeshwarKale 所以没有直接的 API 可以做到这一点,我需要使用一些解决方法,得到它,谢谢 :)

标签: apache-spark apache-spark-mllib apache-spark-ml


【解决方案1】:

我试过这种方式-

 val irisData =                                                                                           
   """                                                                                                    
     |"sepal_length","sepal_width","petal_length","petal_width","label"                                   
     |5.1,3.5,1.4,0.2,Iris-setosa                                                                         
     |4.9,3.0,1.4,0.2,Iris-setosa                                                                         
     |4.7,3.2,1.3,0.2,Iris-setosa                                                                         
     |4.6,3.1,1.5,0.2,Iris-setosa                                                                         
   """.stripMargin                                                                                        

 println(irisData)                                                                                        

   "sepal_length","sepal_width","petal_length","petal_width","label"                                      
   5.1,3.5,1.4,0.2,Iris-setosa                                                                            
   4.9,3.0,1.4,0.2,Iris-setosa                                                                            
   4.7,3.2,1.3,0.2,Iris-setosa                                                                            
   4.6,3.1,1.5,0.2,Iris-setosa                                                                            

val stringDS = spark.createDataset(irisData.split("\n"))(Encoders.STRING)                           
 val irisDatasetDF = spark.read                                                                           
   .option("inferSchema", "true")                                                                         
   .option("header", "true")                                                                              
   .csv(stringDS)                                                                                         
 irisDatasetDF.show(false)                                                                                

   +------------+-----------+------------+-----------+-----------+                                        
   |sepal_length|sepal_width|petal_length|petal_width|label      |                                        
   +------------+-----------+------------+-----------+-----------+                                        
   |5.1         |3.5        |1.4         |0.2        |Iris-setosa|                                        
   |4.9         |3.0        |1.4         |0.2        |Iris-setosa|                                        
   |4.7         |3.2        |1.3         |0.2        |Iris-setosa|                                        
   |4.6         |3.1        |1.5         |0.2        |Iris-setosa|                                        
   +------------+-----------+------------+-----------+-----------+                                        

【讨论】:

    猜你喜欢
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多