【问题标题】:Spark RDD to DataframeSpark RDD 到数据框
【发布时间】:2019-04-03 23:48:39
【问题描述】:

下面是文件中的数据

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】:

    让我们首先考虑您的代码。

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

    【讨论】:

    • 感谢 Oli 的回复,但我正在阅读 kafka 流,它最终以 DStream 的形式出现。将 Dstream 转换为需要转换为 dataStream 的 RDD[String]
    • 如果您将read 替换为readStream,我敢肯定它也会起作用。看看这个例子spark.apache.org/docs/latest/…
    猜你喜欢
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 2019-02-11
    • 1970-01-01
    • 2016-01-20
    相关资源
    最近更新 更多