如何在Spark Dataframe中显示完整的列内容?


201

我正在使用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()

上校似乎被截断了:

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

如何显示该列的全部内容?

Answers:


372

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


4
@tracer如果能解决您的问题,是否接受我的回答,将不胜感激。谢谢!
TomTom101,2015年

3
不是OP,但这确实是正确的答案:次要更正,布尔值应为False,而不是false。
xv70 '16

77
在python中为“ False”,而在scala / java中为“ false”
drewrobb 16-10-7

4
它是假的(不是假的)
卢卡·吉贝利

5
在控制台模式下写入流的等效项是dataFrame.writeStream.outputMode("append").format("console").option("truncate", "false").start()
JMess

38

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


2
我想,在TomTom101的回答评论false在这里也适用。
Mogsdad '16

1
@Narendra Parmar的语法应为results.show(20, False)。您提到的那一个会出错。
贾·普拉卡什

@ Jai Prakash,我已经为scala给出了这个答案,而您正在谈论python,
Narendra Parmar

@NarendraParmar对不起,您是正确的。在scala两个选项中均有效。results.show(false)results.show(20, false)
Jai Prakash

17

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

  1. 列不被截断,
  2. 不损失行数
  3. 快速又
  4. 高效的

这两行很有用...

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

通过持久化,在使用persistcache维护执行者内部的临时基础数据帧结构时,这两个执行者动作(计数和显示)更快,更高效。查看有关持久和缓存的更多信息。


1
非常好。谢谢!
蒂姆布拉姆

15

下面的代码将有助于查看所有行,而每一列都不会被截断

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

我问过先前的回答者相同的问题:这会导致df被收集两次吗?
javadba '18

@javadba是的,我认为count()将通过df一次,而show()将收集df两次。
MoeChen



2

试试这个命令:

df.show(df.count())

1
尝试以下操作:df.show(某些否)将起作用,但df.show(df.count())将不起作用df.count给出的输出类型很长,因为它接受整数类型,因此df.show()不接受。
Thota Kranthi Kumar,

示例使用df.show(2000)。它将检索2000行
Thota Kranthi Kumar,

2
这会导致df被收集两次吗?
javadba '18

2

results.show(20,false) 在Scala中帮了我大忙。






0

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

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

val query = out.writeStream
          .outputMode(OutputMode.Update())
          .format("console")
          .option("truncate", false)
          .trigger(Trigger.ProcessingTime("5 seconds"))
          .start()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.