Spark RDD到Dataframe

问题描述 投票:0回答:1

以下是文件中的数据

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

我正在尝试阅读它并转换为Dataframe。

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|
+--------------------+

我无法将其转换为具有精确表格形式的数据框架

scala apache-spark dataframe
1个回答
1
投票

我们首先考虑您的代码。

// reading a potentially big file
val file=sc.textFile("/user/cloudera-scm/file.csv")
// collecting everything to the driver
val list=file.collect.toList
// converting a local list to a dataframe (this does not work)
list.toDF.show

有一些方法可以使你的代码工作,但逻辑很尴尬。您正在使用执行程序读取数据,将所有数据放在驱动程序上,只需将其转换为数据框(返回执行程序)。这是很多网络通信,驱动程序很可能会耗尽内存以用于任何相当大的数据集。

您可以做什么直接读取数据作为这样的数据帧(驱动程序什么也不做,没有不必要的IO):

spark.read
    .option("sep", "|") // specify the delimiter
    .option("header", true) // to tell spark that there is a header
    .option("inferSchema", true) // optional, infer the types of the columns
    .csv(".../data.csv").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|
+------+-----------+-----------+--------+

© www.soinside.com 2019 - 2024. All rights reserved.