2016-08-16 5 views
0

Я хочу использовать наборы данных вместо dataframes.Как прочитать файл паркета с большим количеством столбцов в наборе данных без специального класса case?

Читает паркетный файл и хочет вывести типы непосредственно:

val df: Dataset[Row] = spark.read.parquet(path) 

Я не хочет Dataset[Row] но и Dataset.

Я знаю, что могу сделать что-то вроде:

val df= spark.read.parquet(path).as[myCaseClass] 

, но мои данные есть много колонок! поэтому, если я могу избежать написания класса case, это было бы здорово!

+2

Вы можете выбрать нужные столбцы, прежде чем преобразовывать их в 'DataSet'. –

ответ

2

Почему вы хотите работать с Dataset? Я думаю, это потому, что у вас будет не только схема бесплатно (что у вас есть с результатом DataFrame), а потому, что у вас будет безопасная схема.

Для вашего набора данных необходимо иметь Encoder, и для этого вам нужен тип, который будет представлять ваш набор данных и, следовательно, схему.

Либо у вас есть select ваши столбцы на разумное количество и используйте as[MyCaseClass], либо вы должны принять то, что предлагает DataFrame.

+0

спасибо Яцек. Это имеет смысл. Я не хотел иметь дело с полями «Row» в сопоставлении. Пример. Скажем, я хочу, чтобы извлечь строку с максимальным значением: Если у меня есть 'DataFrame': ' вал maxMetric = metricsCurve.orderBy ($ «метрика» .desc) .Head() ' Тогда доступ к элементам maxMetric (который является 'Row'), я должен сделать что-то вроде: ' maxMetric.getAs [Double] («precision») ' Но если metricsCurve - это DataSet, я тогда могу сделать: ' maxMetric. точность ', поскольку maxMetric является экземпляром класса – ab3