【问题标题】:Dynamic dataframe with n columns and m rows具有 n 列和 m 行的动态数据框
【发布时间】:2020-06-04 18:45:15
【问题描述】:

json(动态模式)读取数据,并将其加载到数据框。

示例数据框:

scala> import spark.implicits._
import spark.implicits._

scala> val DF = Seq(
     (1, "ABC"),
     (2, "DEF"),
     (3, "GHIJ")
     ).toDF("id", "word")
someDF: org.apache.spark.sql.DataFrame = [number: int, word: string]

scala> DF.show
+------+-----+
|id    | word|
+------+-----+
|     1|  ABC|
|     2|  DEF|
|     3| GHIJ|
+------+-----+

要求: 列数和名称可以是任何东西。我想在循环中读取行以一一获取每一列。需要在后续流程中处理该值。需要列名和值。我正在使用 scala。

Python:
for i, j in df.iterrows(): 
    print(i, j) 

需要在 scala 中具有相同的功能,并且应该单独获取列名和值。

请帮忙。

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    df.iterrows 不是来自 pyspark,而是来自 pandas。在 Spark 中,您可以使用 foreach

    DF
      .foreach{_ match {case Row(id:Int,word:String) => println(id,word)}}
    

    结果:

    (2,DEF)
    (3,GHIJ)
    (1,ABC)
    

    我你不知道列数,你不能在Row上使用unapply,那就这样吧:

    DF
      .foreach(row => println(row))
    

    结果:

    [1,ABC]
    [2,DEF]
    [3,GHIJ]
    

    并使用row 的方法getAs 等进行操作

    【讨论】:

    • 感谢拉姆和拉斐尔。我正在尝试生成动态 Put 语句以将流数据加载到 hbase 中。除了 shc 连接器,还有其他需要考虑的最佳解决方案吗?
    • my answer writeHbase可能是你需要根据你的需要定制,因为你有动态列
    • 如果有用,你想accept the answer & vote吗?
    • 如何在“getAs”中获取动态列名?谢谢
    • check docs 不要忘记接受答案。
    猜你喜欢
    • 2023-02-10
    • 2018-07-13
    • 2020-07-02
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多