首页 > 解决方案 > 对没有标头或架构的数据编写 Spark SQL 查询

问题描述

我想编写一个通用脚本,可以在没有标题或预定义模式的文件上运行 SQL 查询。例如,一个文件可能如下所示:

Bob,32
Alice, 24
Jane,65
Doug,33
Peter,19

SQL 查询可能是:

SELECT COUNT(DISTINCT ??) 
FROM temp_table
WHERE ?? > 32

我想知道在??.

标签: apache-sparkapache-spark-sql

解决方案


您可以在阅读时定义“自定义架构”

val schema = StructType(
  StructField("field1", StringType, true) ::
    StructField("field2", IntegerType, true) :: Nil
) 

val df = spark.read.format("csv")
    .option("sep", ",")
    .option("header", "false")
    .schema(schema)
    .load("examples/src/main/resources/people.csv")

您也可以忽略最终以默认名称结尾的架构部分(非首选)

 val df = spark.read.format("csv")
     .option("sep", ",")
     .option("header", "false")
     .load("examples/src/main/resources/people.csv")

+-----+-----+
|  _c0|  _c1|
+-----+-----+
|  Bob|  32 |  
|  .. | ... |  
+-----+-----+

有了它,您可以填写 spark-sql 中的列名。


推荐阅读