Написание Spark SQL-запроса на данные без заголовка или схемы - PullRequest
0 голосов
/ 28 сентября 2018

Я хочу написать общий сценарий, который может выполнять запросы SQL для файла, который не имеет заголовка или предопределенной схемы.Например, файл может выглядеть следующим образом:

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

И запрос SQL может быть следующим:

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

Мне интересно, что добавить в ??.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

вы можете определить «пользовательскую схему» при чтении как

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.

0 голосов
/ 28 сентября 2018

Кажется, что схема по умолчанию имеет имена столбцов _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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...