ich eine einfache Funken Funktion haben DF Windowing zu testen:SBT Test funktioniert nicht für die Funkenprüfung
import org.apache.spark.sql.{DataFrame, SparkSession}
object ScratchPad {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder().master("local[*]").getOrCreate()
spark.sparkContext.setLogLevel("ERROR")
get_data_frame(spark).show()
}
def get_data_frame(spark: SparkSession): DataFrame = {
import spark.sqlContext.implicits._
val hr = spark.sparkContext.parallelize(List(
("Steinbeck", "Sales", 100),
("Woolf", "IT", 99),
("Wodehouse", "Sales", 250),
("Hemingway", "IT", 349)
)
).toDF("emp", "dept", "sal")
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._
val windowspec = Window.partitionBy($"dept").orderBy($"sal".desc)
hr.withColumn("rank", row_number().over(windowspec))
}
}
Und ich schrieb ein Test wie so:
import com.holdenkarau.spark.testing.DataFrameSuiteBase
import org.apache.spark.sql.Row
import org.apache.spark.sql.types._
import org.scalatest.FunSuite
class TestDF extends FunSuite with DataFrameSuiteBase {
test ("DFs equal") {
val expected=sc.parallelize(List(
Row("Wodehouse","Sales",250,1),
Row("Steinbeck","Sales",100,2),
Row("Hemingway","IT",349,1),
Row("Woolf","IT",99,2)
))
val schema=StructType(
List(
StructField("emp",StringType,true),
StructField("dept",StringType,true),
StructField("sal",IntegerType,false),
StructField("rank",IntegerType,true)
)
)
val e2=sqlContext.createDataFrame(expected,schema)
val actual=ScratchPad.get_data_frame(sqlContext.sparkSession)
assertDataFrameEquals(e2,actual)
}
}
Works Gut, wenn ich mit der rechten Maustaste auf die Klasse intellij klicke und auf "run" klicke. Wenn ich den gleichen Test mit „sbt-Test“ ausführen, schlägt es mit den folgenden:
java.security.AccessControlException: access denied
org.apache.derby.security.SystemPermission("engine",
"usederbyinternals")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
at java.security.AccessController.checkPermission(AccessController.java:884)
at org.apache.derby.iapi.security.SecurityUtil.checkDerbyInternalsPrivilege(Unknown Source)
...
Und hier ist mein SBT Skript, nichts Besonderes-hatte hive Abhängigkeit setzen in, andernfalls wird der Test nicht kompilieren würde:
name := "WindowingTest"
version := "0.1"
scalaVersion := "2.11.5"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.2.1"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.2.1"
libraryDependencies += "org.apache.spark" %% "spark-hive" % "2.2.1"
libraryDependencies += "com.holdenkarau" %% "spark-testing-base" % "2.2.0_0.8.0" % "test"
Google-Suche zeigt mir Derby-6648 (https://db.apache.org/derby/releases/release-10.12.1.1.cgi)
die sagt: Anwendung Änderungen erforderlich Benutzer, die Derby unter einem Security laufen muss die Politik fil bearbeiten e und gewähren Sie folgende zusätzliche Rechte an derby.jar, derbynet.jar und derbyoptionaltools.jar:
Erlaubnis org.apache.derby.security.SystemPermission "engine", "usederbyinternals";
Da ich das Derby nicht explizit installiert habe (wahrscheinlich intern von funken verwendet), wie mache ich das?
Das gleiche Problem hier nach 2.2.0 Upgrade -> 2.2.1 – Daimon
Können Sie laufen 'Funken shell' und führen' spark.range (5) .show'? Geht das für dich? –
Dies funktionierte wie erwartet-ich bekam + --- + | ID | + --- + | 0 | | 1 | | 2 | | 3 | | 4 | + --- + – user1113782