我在jdk1.8上使用spark和scala。我是Scala的新手。 我正在收集对象列表:
val externalEntities = getExternalGenericExtractFiles()
该函数返回(来自Java世界):
public List<GenericExtractExternalEntity> getExternalGenericExtractFiles()
{
return externalGenericExtractFiles;
}
现在我正在尝试:
externalEntities.forEach( externalEntity =>
sqlContext.read.format(externalEntity.getExtractfileType)
.option("compression", externalEntity.getCompressionCodec)
.option("delimiter", externalEntity.getExtractDelimiter)
.option("header", if (externalEntity.getHasHeader.toUpperCase == "Y") "true" else "false")
.load(externalEntity.getFilePath)
.createOrReplaceTempView(externalEntity.getExtractName)
)
并出现错误:
error: missing parameter type
[ERROR] externalEntities.forEach(externalEntity =>
我认为Scala可以推断类型。我在这里想念什么?
如果我只尝试列表中的一个对象,那看起来就像我这样做
val externalEntity= getExternalGenericExtractFiles().get(0)
sqlContext.read.format(externalEntity.getExtractfileType)
.option("compression", externalEntity.getCompressionCodec)
.option("delimiter", externalEntity.getExtractDelimiter)
.option("header", if (externalEntity.getHasHeader.toUpperCase == "Y") "true" else "false")
.load(externalEntity.getFilePath)
.createOrReplaceTempView(externalEntity.getExtractName)
我可以对正在发生的事情和/或如何解决有任何见解吗? 预先感谢
答案 0 :(得分:3)
我假设您没有使用Scala 2.12。将Scala lambda与Java功能接口一起使用需要Scala 2.12。当您传递不期望输入的lambda时,通常会出现该错误消息,这种情况在2.11中会发生。升级您的Scala版本或convert the list to a Scala list。
答案 1 :(得分:0)
我有一个错字(“ forEach”而不是“ foreach”),并且需要一点额外的东西:
import scala.collection.JavaConverters._
val externalEntities:List[GenericExtractExternalEntity] =
getExternalGenericExtractFiles()
.asScala
.iterator
.toList
externalEntities.foreach ( externalEntity =>
sqlContext.read.format(externalEntity.getExtractfileType)
.option("compression", externalEntity.getCompressionCodec)
.option("delimiter", externalEntity.getExtractDelimiter)
.option("header", if (externalEntity.getHasHeader.toUpperCase == "Y") "true" else "false")
.load(externalEntity.getFilePath)
.createOrReplaceTempView(externalEntity.getExtractName)
)
而且有效。