【问题标题】:Creating Spark Row from CSV String从 CSV 字符串创建 Spark 行
【发布时间】:2018-10-23 15:30:48
【问题描述】:

我是 Spark 的新手(使用 Scala),我在 RDD 到 DF 转换等方面尝试了一些事情。 例如,我有一个字符串变量:

val myString = "apple, boy, cat, dog"

如何将 myString 转换为 org.apache.spark.sql.Row

我已经尝试过类似下面的新东西,但是当我尝试打印创建行的长度时,我得到 1(ONE),而我将得到 4。

val row = org.apache.spark.sql.Row.apply(myString)

val row1 = org.apache.spark.sql.Row(myString) 

val row2 = org.apache.spark.sql.Row.fromSeq(Seq(myString.split(',')))

【问题讨论】:

    标签: scala apache-spark apache-spark-sql apache-spark-2.0


    【解决方案1】:

    正确的做法是

    org.apache.spark.sql.Row.fromSeq(myString.split(','))
    //res0: org.apache.spark.sql.Row = [apple, boy, cat, dog]
    

    其中myString.split(',')Array[String] 并隐式转换为Seq

    如果你想创建一个数据框,那么

    val myString = "apple, boy, cat, dog"
    
    val row2 = sc.parallelize(Seq(org.apache.spark.sql.Row.fromSeq(myString.split(','))))
    sqlContext.createDataFrame(row2, StructType(Seq(StructField("name1", StringType, true), StructField("name2", StringType), StructField("name3", StringType), StructField("name4", StringType)))).show(false)
    

    这应该给你

    +-----+-----+-----+-----+
    |name1|name2|name3|name4|
    +-----+-----+-----+-----+
    |apple| boy | cat | dog |
    +-----+-----+-----+-----+
    

    StructType(Seq(StructField("name1", StringType, true), StructField("name2", StringType), StructField("name3", StringType), StructField("name4", StringType))) 是架构创建。

    【讨论】:

    • 感谢 Rameshorg.apache.spark.sql.Row.fromSeq(myString.split(',')) //res0: org.apache.spark.sql.Row = [apple, boy, cat , 狗] 完美运行....
    • @DVN 如果答案对您有帮助,那么您应该考虑接受它:0
    猜你喜欢
    • 1970-01-01
    • 2017-02-19
    • 2020-07-04
    • 1970-01-01
    • 2021-04-01
    • 2014-10-14
    • 2019-07-01
    • 2018-07-19
    • 2016-01-16
    相关资源
    最近更新 更多