【问题标题】:How to show full column content in a Spark Dataframe?如何在 Spark Dataframe 中显示完整的列内容?
【发布时间】:2016-02-17 23:52:52
【问题描述】:

我正在使用 spark-csv 将数据加载到 DataFrame 中。我想做一个简单的查询并显示内容:

val df = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").load("my.csv")
df.registerTempTable("tasks")
results = sqlContext.sql("select col from tasks");
results.show()

col 似乎被截断了:

scala> results.show();
+--------------------+
|                 col|
+--------------------+
|2015-11-16 07:15:...|
|2015-11-16 07:15:...|
|2015-11-16 07:15:...|
|2015-11-16 07:15:...|
|2015-11-16 07:15:...|
|2015-11-16 07:15:...|
|2015-11-16 07:15:...|
|2015-11-16 07:15:...|
|2015-11-16 07:15:...|
|2015-11-16 07:15:...|
|2015-11-16 07:15:...|
|2015-11-16 07:15:...|
|2015-11-16 07:15:...|
|2015-11-16 07:15:...|
|2015-11-16 07:15:...|
|2015-11-06 07:15:...|
|2015-11-16 07:15:...|
|2015-11-16 07:21:...|
|2015-11-16 07:21:...|
|2015-11-16 07:21:...|
+--------------------+

如何显示栏目的全部内容?

【问题讨论】:

    标签: apache-spark dataframe spark-csv output-formatting


    【解决方案1】:

    results.show(20, false) 不会截断。检查source

    20 是在不带任何参数的情况下调用show() 时显示的默认行数。

    【讨论】:

    • 不是 OP,但这确实是正确的答案:小修正,布尔值应该是 False,而不是 false。
    • 在 python 中是“假”,在 scala/java 中是“假”
    • 在 spark-shell 中是假的(不是假的)
    • 在控制台模式下写入流的等价物是dataFrame.writeStream.outputMode("append").format("console").option("truncate", "false").start()
    • 20有什么特别之处?为什么是 20?
    【解决方案2】:

    如果你输入results.show(false),结果不会被截断

    【讨论】:

    • 我想the comment on TomTom101's answer 关于false 也适用于此。
    • @Narendra Parmar 语法应该是results.show(20, False)。你提到的那个会出错。
    • @ Jai Prakash,我已经为 scala 给出了这个答案,而您正在谈论 python,
    • @NarendraParmar 对不起,你是对的。在scala 中,这两个选项都有效。 results.show(false)results.show(20, false)
    【解决方案3】:

    下面的代码将有助于查看每列中没有截断的所有行

    df.show(df.count(), False)
    

    【讨论】:

    • 我问过之前的回答者同样的问题:这是否会导致df 被收集两次?
    • @javadba 是的,我认为 count() 将通过 df 一次,而 show() 将收集 df 两次。
    • 作为替代方案,您可以将一个非常大的数字作为第一个参数而不是 df.count(),以节省持久化的要求。例如,如果 df 的行数是 1000,你可以做 df.show(1000000, false) 并且它会工作。尝试了以下方法并成功了:scala> println(df.count) res2: Long = 987 scala> df.show(990)
    【解决方案4】:

    其他解决方案都很好。如果这些是您的目标:

    1. 不截断列,
    2. 不会丢失行,
    3. 快速且
    4. 高效

    这两行很有用...

        df.persist
        df.show(df.count, false) // in Scala or 'False' in Python
    

    通过持久化,使用persistcache 来维护执行器中的临时底层数据帧结构时,计数和显示这两个执行器操作更快、更高效。查看更多关于persist and cache的信息。

    【讨论】:

    • 非常好。谢谢!
    【解决方案5】:

    results.show(20, False)results.show(20, false) 取决于你是否在 Java/Scala/Python 上运行它

    【讨论】:

      【解决方案6】:

      results.show(false) 将显示完整的专栏内容。

      显示方法默认限制为20,在false前加一个数字会显示更多行。

      【讨论】:

        【解决方案7】:

        results.show(20,false) 在 Scala 中为我成功了。

        【讨论】:

          【解决方案8】:

          以下答案适用于 Spark Streaming 应用程序。

          通过将“truncate”选项设置为 false,您可以告诉输出接收器显示完整的列。

          val query = out.writeStream
                    .outputMode(OutputMode.Update())
                    .format("console")
                    .option("truncate", false)
                    .trigger(Trigger.ProcessingTime("5 seconds"))
                    .start()
          

          【讨论】:

            【解决方案9】:

            试试 df.show(20,False)

            请注意,如果您不指定要显示的行数,它将显示 20 行,但将执行所有数据帧,这将需要更多时间!

            【讨论】:

              【解决方案10】:

              Pyspark中我们可以使用

              df.show(truncate=False) 这将显示没有截断的列的全部内容。

              df.show(5,truncate=False) 这将显示前五行的全部内容。

              【讨论】:

                【解决方案11】:

                试试这个命令:

                df.show(df.count())
                

                【讨论】:

                • 试试这个: df.show(some no) 会工作,但 df.show(df.count()) 不会工作 df.count 给出的输出类型 long 不被 df.show( ) 因为它接受整数类型。
                • 示例使用 df.show(2000)。它将检索 2000 行
                • 这是否会导致df 被收集两次?
                【解决方案12】:

                Databricks 中,您可以以表格格式可视化数据框。使用命令:

                display(results)
                

                看起来像

                【讨论】:

                  【解决方案13】:

                  在 c# 中,Option("truncate", false) 不会截断输出中的数据。

                  StreamingQuery query = spark
                                      .Sql("SELECT * FROM Messages")
                                      .WriteStream()
                                      .OutputMode("append")
                                      .Format("console")
                                      .Option("truncate", false)
                                      .Start();
                  

                  【讨论】:

                    【解决方案14】:

                    在 pyspark 中试过这个

                    df.show(truncate=0)
                    

                    【讨论】:

                      【解决方案15】:

                      我使用的插件 Chrome 扩展效果很好:

                      [https://userstyles.org/styles/157357/jupyter-notebook-wide][1]

                      【讨论】:

                        【解决方案16】:

                        在 scala 中试试这个:

                        df.show(df.count.toInt, false)
                        

                        show 方法接受一个整数和一个布尔值,但 df.count 返回 Long...所以需要类型转换

                        【讨论】:

                          【解决方案17】:

                          PYSPARK

                          在下面的代码中,df 是数据框的名称。第一个参数是动态显示数据框中的所有行,而不是硬编码一个数值。第二个参数将负责显示完整的列内容,因为该值设置为False

                          df.show(df.count(),False)
                          


                          SCALA

                          在下面的代码中,df 是数据框的名称。第一个参数是动态显示数据框中的所有行,而不是硬编码一个数值。第二个参数将负责显示完整的列内容,因为该值设置为false

                          df.show(df.count().toInt,false)
                          

                          【讨论】:

                            猜你喜欢
                            • 2022-01-17
                            • 2012-09-08
                            • 1970-01-01
                            • 2015-09-16
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            相关资源
                            最近更新 更多