Это держит. Порядок пунктов в шаблоне соответствия, который вы связали, не имеет значения.

ользую Spark 2.2.0

Я читаю CSV-файл следующим образом:

val dataFrame = spark.read.option("inferSchema", "true")
                          .option("header", true)
                          .option("dateFormat", "yyyyMMdd")
                          .csv(pathToCSVFile)

В этом файле есть один столбец даты, и все записи имеют значение, равное20171001 для этого конкретного столбца.

Проблема в том, что искра выводит, что тип этого столбцаinteger скорее, чемdate, Когда я удаляю"inferSchema" опция, тип этого столбцаstring.

Здесь нетnull значения, ни любая неправильно отформатированная строка в этом файле.

Какова причина / решение этой проблемы?

 Rami02 окт. 2017 г., 18:14
Я могу, но я предполагаю, что опция dateFormat сделана, чтобы не делать то, что вы предложили, верно?
 Avishek Bhattacharya02 окт. 2017 г., 18:12
Вы можете попробовать отключить ("inferSchema", "true") и предоставить пользовательскую схему для чтения файла csv.
 eliasah02 окт. 2017 г., 18:38
Это должно быть экранировано двойными кавычками, если моя память все еще хороша.

Ответы на вопрос(2)

Решение Вопроса

Если мое понимание верно,код подразумевает следующий порядок вывода типов (с первым сравниваются первые типы):

NullTypeIntegerTypeLongTypeDecimalTypeDoubleTypeTimestampTypeBooleanTypeStringType

С этим, я думаю, проблема в том, что20171001 СпичкиIntegerType прежде чем даже рассмотретьTimestampType (который используетtimestampFormat неdateFormat опция).

Одним из решений будет определение схемы и использование ее сschema оператор (изDataFrameReader) или пусть Spark SQL выведет схему и используетcast оператор.

Я бы выбрал первое, если количество полей невелико.

означности формата.

Поскольку вход может быть проанализирован какIntegerType (или любой более высокоточный числовой формат), а такжеTimestamType и первый имеет более высокий приоритет (внутренне Spark пытаетсяIntegerType ->LongType ->DecimaType ->DoubleType ->TimestampType) механизм вывода никогда не достигнетTimestampType кейс.

А именно, с включенным выводом схемы, SparkпозвонюtryParseInteger, который будет правильно анализировать вход истоп, Последующий звонок будет соответствоватьвторой случай и закончить в то жеtryParseInteger вызов.

 user691041103 окт. 2017 г., 18:37
Это держит. Порядок пунктов в шаблоне соответствия, который вы связали, не имеет значения.
 Jacek Laskowski02 окт. 2017 г., 18:56
msgstr "механизм вывода никогда не достигнет случая TimestampType." Я не думаю, что с учетомgithub.com/apache/spark/blob/master/sql/core/src/main/scala/org/...

Ваш ответ на вопрос