eclipse - 在 spark scala 程序中找不到主类
问题描述
//包com.jsonReader
import play.api.libs.json._
import play.api.libs.json._
import play.api.libs.json.Reads._
import play.api.libs.json.Json.JsValueWrapper
import org.apache.spark._
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.SQLContext
//import org.apache.spark.implicits._
//import sqlContext.implicits._
object json {
def flatten(js: JsValue, prefix: String = ""): JsObject = js.as[JsObject].fields.foldLeft(Json.obj()) {
case (acc, (k, v: JsObject)) => {
val nk = if(prefix.isEmpty) k else s"$prefix.$k"
acc.deepMerge(flatten(v, nk))
}
case (acc, (k, v: JsArray)) => {
val nk = if(prefix.isEmpty) k else s"$prefix.$k"
val arr = flattenArray(v, nk).foldLeft(Json.obj())(_++_)
acc.deepMerge(arr)
}
case (acc, (k, v)) => {
val nk = if(prefix.isEmpty) k else s"$prefix.$k"
acc + (nk -> v)
}
}
def flattenArray(a: JsArray, k: String = ""): Seq[JsObject] = {
flattenSeq(a.value.zipWithIndex.map {
case (o: JsObject, i: Int) =>
flatten(o, s"$k[$i]")
case (o: JsArray, i: Int) =>
flattenArray(o, s"$k[$i]")
case a =>
Json.obj(s"$k[${a._2}]" -> a._1)
})
}
def flattenSeq(s: Seq[Any], b: Seq[JsObject] = Seq()): Seq[JsObject] = {
s.foldLeft[Seq[JsObject]](b){
case (acc, v: JsObject) =>
acc:+v
case (acc, v: Seq[Any]) =>
flattenSeq(v, acc)
}
}
def main(args: Array[String]) {
val appName = "Stream example 1"
val conf = new SparkConf().setAppName(appName).setMaster("local[*]")
//val spark = new SparkContext(conf)
val sc = new SparkContext(conf)
//val sqlContext = new SQLContext(sc)
val sqlContext=new SQLContext(sc);
//val spark=sqlContext.sparkSession
val spark = SparkSession.builder().appName("json Reader")
val df = sqlContext.read.json("C://Users//ashda//Desktop//test.json")
val set = df.select($"user",$"status",$"reason",explode($"dates")).show()
val read = flatten(df)
read.printSchema()
df.show()
}
}
我正在尝试使用此代码来展平高度嵌套的 json。为此,我创建了一个项目并将其转换为一个 Maven 项目。我编辑了 pom.xml 并包含了我需要的库,但是当我运行程序时它显示“错误:无法找到或加载主类”。
我尝试将代码转换为 sbt 项目然后运行,但我得到了同样的错误。我尝试打包代码并通过 spark-submit 运行,这给了我同样的错误。请让我知道我在这里缺少什么。我已经尽力了。
谢谢
解决方案
很难说,但也许你有很多类可以作为主类,所以构建工具不知道选择哪一个。也许先尝试清理项目sbt clean
。
无论如何,在 scala 中,定义主类的首选方法是扩展 App -trait。
object SomeApp extends App
然后整个对象体将成为您的主要方法。您还可以在 build.sbt 中定义主类。如果您有许多扩展 App 特征的对象,这是必要的。
mainClass in (Compile, run) := Some("io.example.SomeApp")
推荐阅读
- cmd - 强制 CMD 将管道更新到剪贴板
- python - Pandas 使用 groupby-apply 将索引作为列进行透视
- python - Python 语句适用于 Python2,但不适用于 Python3。我应该改变什么?
- postgresql - 如何将空记录输入到 postgres 表中
- java - 如何访问泛型类型中的泛型类型?
- ios - SwiftUI Scrollview Kingfisher KFImage Firebase 存储 IDEDebugSessionErrorDomain 代码:4 来自调试器的消息:因内存问题而终止
- c# - 为什么我的表单正文在 Web API 中始终为空?
- angular - Angular Reactive Forms:如何使表单值不进入后端
- time-complexity - 确定该程序的时间复杂度
- python - 如何清除外壳上的文本?