我需要Spark数据框的有用的字符串表示形式。我通过df.show获得的代码很棒-但我无法以字符串形式获得该输出,因为showString调用的内部show方法是私有(private)的。有什么方法可以得到相似的输出,而无需编写重复相同功能的方法?

最佳答案

如果您确实打算重用现有代码,则可以通过反射访问showString

scala> val df = spark.range(10)
df: org.apache.spark.sql.Dataset[Long] = [id: bigint]

scala> val showString = classOf[org.apache.spark.sql.DataFrame].getDeclaredMethod("showString", classOf[Int], classOf[Int], classOf[Boolean])
showString: java.lang.reflect.Method = public java.lang.String org.apache.spark.sql.Dataset.showString(int,int,boolean)

scala> showString.setAccessible(true)

scala> showString.invoke(df, 10.asInstanceOf[Object], 20.asInstanceOf[Object], false.asInstanceOf[Object]).asInstanceOf[String]
res2: String =
"+---+
| id|
+---+
|  0|
|  1|
|  2|
|  3|
|  4|
|  5|
|  6|
|  7|
|  8|
|  9|
+---+
"

关于apache-spark - 如何获取DataFrame的字符串表示形式(以及Dataset.show一样)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51218439/

10-13 05:15