Spark SQL 中的 Parquet 文件

Posted

技术标签:

【中文标题】Spark SQL 中的 Parquet 文件【英文标题】:Parquet file in Spark SQL 【发布时间】:2014-08-26 12:01:36 【问题描述】:

我正在尝试通过 parquet 文件格式使用 Spark SQL。当我尝试基本示例时:

object parquet 

  case class Person(name: String, age: Int)

  def main(args: Array[String]) 

    val sparkConf = new SparkConf().setMaster("local").setAppName("HdfsWordCount")
    val sc = new SparkContext(sparkConf)
    val sqlContext = new org.apache.spark.sql.SQLContext(sc)
    // createSchemaRDD is used to implicitly convert an RDD to a SchemaRDD.
    import sqlContext.createSchemaRDD

    val people = sc.textFile("C:/Users/pravesh.jain/Desktop/people/people.txt").map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt))
    people.saveAsParquetFile("C:/Users/pravesh.jain/Desktop/people/people.parquet")

    val parquetFile = sqlContext.parquetFile("C:/Users/pravesh.jain/Desktop/people/people.parquet")
  

我得到一个空指针异常:

线程“main”中的异常 java.lang.NullPointerException 在 org.apache.spark.parquet$.main(parquet.scala:16)

这是行 saveAsParquetFile。这里有什么问题?

【问题讨论】:

【参考方案1】:

当我在 Windows 的 eclipse 中使用 Spark 时出现此错误。我在 spark-shell 上尝试了同样的方法,它工作正常。我猜 spark 可能不是 100% 兼容 windows。

【讨论】:

【参考方案2】:

Spark 与 Windows 兼容。您可以在 Windows 的 spark-shell 会话中运行程序,也可以使用带有必要参数的 spark-submit 运行它,例如“-master”(同样,在 Windows 或其他操作系统中)。 如果没有正确设置 Spark 环境等,您不能只在 Eclispe 中将 Spark 程序作为普通 Java 程序运行。您的问题与 Windows 无关。

【讨论】:

以上是关于Spark SQL 中的 Parquet 文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 spark sql 重命名 Parquet 文件中列名中的空格

Parquet + Spark SQL

如何使用 Spark SQL 在 Parquet 文件中选择嵌套数组和映射

Spark基础学习笔记25:Spark SQL数据源 - Parquet文件

在脚本中迭代/循环 Spark parquet 文件会导致内存错误/堆积(使用 Spark SQL 查询)

使用 spark-sql cli 将 csv 数据直接加载到 parquet 表中