spark 不显示所有内容

spark do not show all content in line

我有一个包含内容的数据框

scala> true_nomar.show(1)
+--------+--------------+--------------------+------+------+--------------------+
|category|topicUpPredict|               topic|ciTrue|upTrue|              normal|
+--------+--------------+--------------------+------+------+--------------------+
|the_thao|      the_thao|[the_thao, the_gioi]|  true|  true| Khi các mục sư m...|
+--------+--------------+--------------------+------+------+--------------------+
only showing top 1 row

但是我显示全部的时候,normal栏的内容不是全文,另外一栏没有内容

scala> true_nomar.show(1,false)
+--------+--------------+--------------------+------+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|category|topicUpPredict|topic               |ciTrue|upTrue|normal                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
+--------+--------------+--------------------+------+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Thích thú trước hai vị học trò đặc biệt này, ông Eriksson nói: "Bóng đá cần nhiều người như là hai vị mục sư Charles và Tim để tạo cho trẻ em thật nhiều cơ hội đến với bóng đá”. Thậm chí Geoff Hurst, cựu ngôi sa|ổi lại, hai mục sư Crosland và Smith cùng các con chiên sẽ cầu nguyện cho đội tuyển Anh trong VCK World Cup 2006 mà trước mắt là cầu nguyện cho chấn thương của tiền đạo Michael Owen sớm hồi phục. 
+--------+--------------+--------------------+------+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
only showing top 1 row

这很可能是由于文本某处嵌入了一个或多个回车 return (CR) 符号(Scala 字符串文字中的 \r)。遇到 CR 时,终端将插入符移到行首,这会打乱输出:

scala> "123\r456"
4560: String = 123

此处,输出应为 res0: String = 123...,但插入符号位置在 123456 覆盖 res 后重置。打印数据帧时也会发生同样的情况:

scala> Seq(("baz", "foofoofoo\rbarbar")).toDF("cat", "normal").show(false)
+---+----------------+
|cat|normal          |
+---+----------------+
barbar|ofoofoo
+---+----------------+

如果仔细查看输出,您会发现结尾 |,所以它是全文,只是乱码:

--------------------

--------------------
 cựu ngôi sa|ổi lại,
--------------------
            ^
            ^
   end of "normal" column

使用 regexp_replace($"normal", "\r", "\\r") 将所有 CR 替换为转义表示 \r:

scala> val df = Seq(("baz", "foofoofoo\rbarbar")).toDF("cat", "normal")
df: org.apache.spark.sql.DataFrame = [cat: string, normal: string]

scala> df.show(false)
+---+----------------+
|cat|normal          |
+---+----------------+
barbar|ofoofoo
+---+----------------+


scala> df.withColumn("normal", regexp_replace($"normal", "\r", "\\r")).show(false)
+---+-----------------+
|cat|normal           |
+---+-----------------+
|baz|foofoofoo\rbarbar|
+---+-----------------+