【问题标题】:Creating data frame out of sequence using toDF method in Apache Spark在 Apache Spark 中使用 toDF 方法创建乱序数据帧
【发布时间】:2021-04-09 14:35:09
【问题描述】:

我使用 Spark 2.4.4 并尝试获取下面给出的数据框。

val spark =  SparkSession
            .builder
            .master("local[*]")
            .appName("App")
            .getOrCreate 

import spark.sqlContext.implicits._  
import spark.implicits._

val justNow = spark.sparkContext.parallelize( 
        Seq(Row("1", "One")
           ,Row("2", "Tow")
        )
).toDF

我在 main 方法中定义了上述代码。但是我收到一个错误,即 toDF 不是 RDD 中定义的函数。我参考了 stackoverflow 上的其他帖子,以包含显式以消除错误。我还是明白了。

error: value toDF is not a member of org.apache.spark.rdd.RDD[org.apache.spark.sql.Row]
possible cause: maybe a semicolon is missing before `value toDF'?
Error occurred in an application involving default arguments. 

有人可以帮忙吗?谢谢!

【问题讨论】:

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


    【解决方案1】:

    您可以改用createDataFrame 方法。 toDF 不适合 RDD of Rows。

    import org.apache.spark.sql.types._
    import org.apache.spark.sql.Row
    
    val schema = StructType(Seq(StructField("col1",StringType), StructField("col2",StringType)))
    val df = spark.createDataFrame(sc.parallelize(Seq(Row("1", "One"),Row("2", "Tow"))), schema)
    
    df.show
    +----+----+
    |col1|col2|
    +----+----+
    |   1| One|
    |   2| Tow|
    +----+----+
    

    【讨论】:

    • 是的,麦克。这个效果很好。 jJst 试图理解为什么 toDF 不能像 spark 教科书和其他文章中提到的那样工作。谢谢!
    • 我可能错了,但是 toDF 适用于 Array/Seq 等的 RDD,但不适用于 RDD[Row]。
    • @user3103957,您好,您无法在不指定架构的情况下从 Row 对象的集合中隐式创建 df。是的,它适用于其他对象集合,但不适用于 Row。
    猜你喜欢
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 2016-11-16
    • 2017-01-21
    相关资源
    最近更新 更多