【问题标题】:Case Class from Parquet using Spark使用 Spark 的 Parquet 案例类
【发布时间】:2015-05-20 01:11:11
【问题描述】:

我已经完成了一些示例代码,关于如何在 parquet 文件中存储数据并实现它,就像programming guide 中所示:

val schema = StructType(
  List(StructField("id", LongType, false), StructField("values", ArrayType(FloatType), false))
)
val dataframe = sqlContext.createDataFrame(rowRDD, schema).saveAsParquetFile("file.parquet")

在读取 parquet 文件时,我使用

sqlContext.parquetFile("file.parquet")

编程指南中的示例始终假定您使用字符串,因此以下内容非常简单:

data.map(t => "Name: " + t(0)).collect().foreach(println)

但是,正如您在我的架构定义中看到的那样,我使用的是浮点数组。当然,我可以自己将字符串解析为浮点数组,但这似乎不是这样做的方法。这样做的最佳方法是什么?

【问题讨论】:

    标签: apache-spark apache-spark-sql parquet


    【解决方案1】:

    Row 在与基本索引器一起使用时返回Any,因此您应该能够只使用t.getSeq[Float](0),它将以Seq[Float] 的形式返回您的数据。您还可以在您的DataFrame 上使用printSchema 来验证该类型确实是ArrayType

    【讨论】:

    • 谢谢,它有效!只是为了完整起见,这就是我所做的:sqlContext.parquetFile("file.parquet").map(x => x.getSeq[Float](1))。请注意,在getSeq(n) 中,n 指定字段(数字)
    猜你喜欢
    • 2019-06-11
    • 2016-12-31
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多