Scala Spark RDD到数据帧
下面是文件中的数据Scala Spark RDD到数据帧,scala,apache-spark,dataframe,Scala,Apache Spark,Dataframe,下面是文件中的数据 PREFIX|Description|Destination|Num_Type 1|C1|IDD|NA 7|C2|IDDD|NA 20|C3|IDDD|NA 27|C3|IDDD|NA 30|C5|IDDD|NA 我正在尝试读取它并将其转换为数据帧 val file=sc.textFile("/user/cloudera-scm/file.csv") val list=file.collect.toList list.toDF.show +----------------
PREFIX|Description|Destination|Num_Type
1|C1|IDD|NA
7|C2|IDDD|NA
20|C3|IDDD|NA
27|C3|IDDD|NA
30|C5|IDDD|NA
我正在尝试读取它并将其转换为数据帧
val file=sc.textFile("/user/cloudera-scm/file.csv")
val list=file.collect.toList
list.toDF.show
+--------------------+
| value|
+--------------------+
|PREFIX|Descriptio...|
| 1|C1|IDD|NA|
| 7|C2|IDDD|NA|
| 20|C3|IDDD|NA|
| 27|C3|IDDD|NA|
| 30|C5|IDDD|NA|
+--------------------+
<>我不能用精确的表格形式将数据转换成数据表 让我们先考虑一下你的代码。< /P>
//读取潜在的大文件
val file=sc.textFile(“/user/cloudera scm/file.csv”)
//收集所有东西给司机
val list=file.collect.toList
//将本地列表转换为数据帧(这不起作用)
list.toDF.show
有很多方法可以让你的代码正常工作,但是逻辑很难理解。您正在使用执行器读取数据,将所有数据放在驱动程序上,以便将其转换为数据帧(返回到执行器)。这需要大量的网络通信,对于任何相当大的数据集,驱动程序很可能会耗尽内存
您可以做什么?它可以像这样直接以数据帧的形式读取数据(驱动程序不执行任何操作,也没有不必要的IO):
spark.read
.option(“sep”、“|”)//指定分隔符
.option(“header”,true)//告诉spark有一个header
.option(“推断模式”,true)//可选,推断列的类型
.csv(“…/data.csv”).show
+------+-----------+-----------+--------+
|前缀|描述|目的地| Num|u类型|
+------+-----------+-----------+--------+
|1 | C1 | IDD | NA|
|7 | C2 | IDDD | NA|
|20 | C3 | IDDD | NA|
|27 | C3 | IDDD | NA|
|30 | C5 | IDDD | NA|
+------+-----------+-----------+--------+
感谢您回复Oli,但我正在阅读kafka stream,它最终将以数据流的形式出现。将数据流转换为RDD[String],需要将其转换为数据流。如果您将read
替换为readStream
,我确信它也会起作用。看看这个例子