2016-08-16 3 views
4

Я работаю с Spark 2.0 Scala. Я могу преобразовать RDD в DataFrame с помощью метода toDF().Spark 2.0 Scala - RDD.toDF()

val rdd = sc.textFile("/pathtologfile/logfile.txt") 
val df = rdd.toDF() 

Но для жизни я не могу найти, где это находится в документах API. Это не под RDD. Но это находится в DataSet (link 1). Однако у меня есть RDD, а не DataSet.

Также я не вижу его под имплицитом (link 2).

Так что, пожалуйста, помогите мне понять, почему toDF() можно вызвать для моего RDD. Где этот метод унаследован?

+0

Где вы называете это от? искровым оболочку? –

+0

Да. Просто выполните локальную настройку Spark и запустите мой скрипт scala, используя - ./bin/spark-shell --master local [2] -i /pathtomyscale/myfile.scala – Carl

ответ

5

Он идет отсюда:

Spark 2 API

Пояснение: если импортировать sqlContext.implicits._, то есть неявный метод для преобразования RDD в DataSetHolder (rddToDataSetHolder), то вы звоните toDF на DataSetHolder

+0

Удивительный! Теперь имеет смысл, откуда этот метод. – Carl

1

Да, вы должны импортировать sqlContext implicits подобные:

val sqlContext = //create sqlContext 

import sqlContext.implicits._ 

val df = RDD.toDF() 

Перед тем, как позвонить в "toDF" в вашем РДЕ

С уважением.

+0

Мне не нужно импортировать его. Мой код работает так, как есть. Может быть, он автоматически импортируется? Но я не понимаю, почему я не вижу toDF() как метод в документах API для implicits? Откуда он? – Carl

+0

мм .. нормально, извините, я понял ваш вопрос. Я нахожу, где находится, и находится в Dataset.scala, но я не знаю, как импортируется: S https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org /apache/spark/sql/Dataset.scala – DanielVL

2

Да, я наконец нашел кусок ума, этот вопрос. Меня это беспокоило, черт возьми, этот пост - спасатель жизни. Я пытался в общем случае загружать данные из файлов журналов в объект класса case, делая его изменчивым List, эта идея состояла в том, чтобы, наконец, преобразовать список в DF. Однако, поскольку он был изменен, а Spark 2.1.1 изменил реализацию toDF, почему бы не попытаться преобразовать список. Я, наконец, подумал о том, чтобы даже закрыть сохранение данных в файл и загрузить его с помощью .read. Однако 5 минут назад этот пост спас мой день.

Я сделал то же, что и описано.

после загрузки данных в изменяемый список я сразу использовал

import spark.sqlContext.implicits._ 
val df = <mutable list object>.toDF 
df.show()