我正在使用Spark 2.0 Scala。我可以使用toDF()方法将RDD转换为DataFrame。
val rdd = sc.textFile("/pathtologfile/logfile.txt")
val df = rdd.toDF()
但是对于我的生活,我无法在API文档中找到它的位置。它不属于RDD。但它在DataSet(link 1)下。但是我有一个RDD而不是DataSet。
此外,我无法在暗示下看到它(link 2)。
所以请帮助我理解为什么可以为我的RDD调用toDF()。这个方法从哪里继承?
答案 0 :(得分:11)
它来自这里:
说明:如果您导入sqlContext.implicits._
,则可以使用隐式方法将RDD
转换为DataSetHolder
(rddToDataSetHolder
),然后在toDF
上调用DataSetHolder
SELECT t.*
FROM
(
/* your UNION query here */
) t
ORDER BY t.InputDate OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY
答案 1 :(得分:3)
是的,您应该导入sqlContext含义:
val sqlContext = //create sqlContext
import sqlContext.implicits._
val df = RDD.toDF()
在RDD中呼叫“toDF”之前
答案 2 :(得分:2)
是的,我终于找到了一个想法,这个问题。这让我感到困扰,这篇文章是一个救生员。我试图将数据从日志文件一般加载到一个案例类对象,使其成为可变的List,这个想法是最终将列表转换为DF。但是因为它是可变的并且Spark 2.1.1已经改变了toDF实现,所以列表不希望转换的原因。我终于想到甚至覆盖将数据保存到文件并使用.read加载它。然而5分钟后,这篇文章救了我的一天。
我按照与描述完全相同的方式。
将数据加载到可变列表后,我立即使用
import spark.sqlContext.implicits._
val df = <mutable list object>.toDF
df.show()
答案 3 :(得分:0)
我已经使用Spark 2做到了这一点。 它起作用了。
val orders = sc.textFile("/user/gd/orders")
val ordersDF = orders.toDF()