我想编写一个通用脚本,该脚本可以对没有标题或预定义架构的文件运行SQL查询。例如,文件可能如下所示:
Bob,32
Alice, 24
Jane,65
Doug,33
Peter,19
SQL查询可能是:
SELECT COUNT(DISTINCT ??)
FROM temp_table
WHERE ?? > 32
我想知道在??
中放什么。
答案 0 :(得分:2)
您可以在阅读时定义“自定义模式”
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中填写列名称。
答案 1 :(得分:0)
似乎默认架构具有列名_c0
,_c1
等。
val df = spark.read.format("csv").load("test.txt")
scala> df.printSchema
root
|-- _c0: string (nullable = true)
|-- _c1: string (nullable = true)
在Spark 2.0中,
df.createOrReplaceTempView("temp_table")
spark.sql("SELECT COUNT(DISTINCT _c1) FROM temp_table WHERE cast(_c1 as int) > 32")