我在Databricks笔记本上使用Spark 2.1和Scala 2.11
什么是TimestampType?
我们知道,从SparkSQL的文档那是官方的时间戳类型是TimestampType,这显然是对的java.sql.Timestamp一个别名:
TimestampType可以在SparkSQL的Scala API中找到
使用模式和数据集API时,我们有所不同
从Databricks的Scala Structured Streaming示例解析时{"time":1469501297,"action":"Open"}
使用Json架构 - > OK(我更喜欢使用优雅的Dataset API):
val jsonSchema = new StructType().add("time", TimestampType).add("action", StringType)
val staticInputDF =
spark
.read
.schema(jsonSchema)
.json(inputPath)
Run Code Online (Sandbox Code Playgroud)
使用数据集API - > KO:找不到TimestampType的编码器
创建Event类
import org.apache.spark.sql.types._
case class Event(action: String, time: TimestampType)
--> defined class Event
Run Code Online (Sandbox Code Playgroud)
在databricks上从DBFS读取事件时出错.
注意:java.sql.Timestamp作为"时间"类型使用时,我们不会收到错误
val path = "/databricks-datasets/structured-streaming/events/"
val events = spark.read.json(path).as[Event]
Run Code Online (Sandbox Code Playgroud)
错误信息
java.lang.UnsupportedOperationException: No Encoder found for org.apache.spark.sql.types.TimestampType
- field (class: "org.apache.spark.sql.types.TimestampType", name: "time")
- …Run Code Online (Sandbox Code Playgroud) timestamp scala apache-spark apache-spark-sql apache-spark-dataset
我试图写dataframe至text文件。如果文件包含单列,那么我可以在文本文件中写入。如果文件包含多列,那么我将面临一些错误
文本数据源仅支持单列,您有 2 列。
object replace {
def main(args:Array[String]): Unit = {
Logger.getLogger("org").setLevel(Level.ERROR)
val spark = SparkSession.builder.master("local[1]").appName("Decimal Field Validation").getOrCreate()
var sourcefile = spark.read.option("header","true").text("C:/Users/phadpa01/Desktop/inputfiles/decimalvalues.txt")
val rowRDD = sourcefile.rdd.zipWithIndex().map(indexedRow => Row.fromSeq((indexedRow._2.toLong+1) +: indexedRow._1.toSeq)) //adding prgrefnbr
//add column for prgrefnbr in schema
val newstructure = StructType(Array(StructField("PRGREFNBR",LongType)).++(sourcefile.schema.fields))
//create new dataframe containing prgrefnbr
sourcefile = spark.createDataFrame(rowRDD, newstructure)
val op= sourcefile.write.mode("overwrite").format("text").save("C:/Users/phadpa01/Desktop/op")
}
}
Run Code Online (Sandbox Code Playgroud) 我想在根处渲染null,因此我可以拥有一个呈现null的完整树,但只是利用React的组件(+它的生命周期方法)结构.
这里有一些关于"返回null概念"的信息:https://github.com/joshwcomeau/return-null - 来自react conf的照明讲话.
我正在制作电子应用程序.在主要范围内,没有dom.在这个主范围(index.js)中我有我的redux存储,我在整个树中返回null,包括root.但是我最初无法渲染它,因为对于初始渲染我需要像这样使用ReactDOM.render:
ReactDOM.render(<AllNullStuff />, document.getElementById('something'))
Run Code Online (Sandbox Code Playgroud)
我没有DOM,反正有渲染吗?
如果我null以root身份尝试,我会收到错误:
错误:_registerComponent(...):目标容器不是DOM元素.
有没有办法渲染完整的null树,所以不需要DOM?
我有带有受保护静态方法的java类:
package parent;
public class Parent {
protected static void parentMethod() {
System.out.println("I'm in parent static method");
}
}
Run Code Online (Sandbox Code Playgroud)
在Scala 2.12.4(2.12.3)之前,我可以从另一个包中调用此方法,如下所示:
package child
import parent.Parent
class Child extends Parent {
def childMethod = {
println("I'm in child method and calling parentMethod")
Parent.parentMethod()
}
}
Run Code Online (Sandbox Code Playgroud)
但Scala 2.12.4不编译此代码.我收到错误:
错误:(9,12)在对象父类的方法parentMethod不能在对象parent.Parent访问访问到受保护的方法parentMethod不允许的,因为前缀类型parent.Parent.type不符合在包孩子在那里访问发生家长反对孩子.parentMethod()
这种访问模式对我来说非常重要,因为JOOQ代码生成使用它.
发生了什么?
我正在努力在Python中的TensorFlow中实现激活功能.
代码如下:
def myfunc(x):
if (x > 0):
return 1
return 0
Run Code Online (Sandbox Code Playgroud)
但我总是得到错误:
不允许使用
tf.TensorPython作为Pythonbool.使用if t is not None:
machine-learning deep-learning keras tensorflow activation-function
我们如何使用Scala中的Spark动态地将列名和操作符名称传递给SQL查询?
我试过(不成功)以下内容:
spark.sql("set key_tbl=mytable")
spark.sql("select count(1) from ${key_tbl}").collect()
Run Code Online (Sandbox Code Playgroud) 我一直在阅读有关 Dotty 的文章,因为它看起来即将成为 Scala 3,并注意到类型投影被认为是“不健全的”并从语言中删除......
这似乎很糟糕,因为我已经看到了几个非常有用的用例。例如:
trait Contents
class Foo extends Contents
class Bar extends Contents
trait Container[T <: Contents] { type ContentType = T }
class FooContainer extends Container[Foo]
class BarContainer extends Container[Bar]
trait Manager[T <: Container[_]] {
type ContainerType = T
type ContentType = T#ContentType
def getContents: ContentType
def createContainer(contents: ContentType): ContainerType
}
Run Code Online (Sandbox Code Playgroud)
如何在 Dotty 中做这样的事情?将第二个类型参数添加到Manager? 但是,除了创建和操作 的实例变得非常乏味这一事实之外Manager,它也不太有效,因为没有办法强制执行这两种类型之间的关系(Manager[FooContainer, Bar]不应该是合法的)。
然后,还有其他用途,如类型 lambdas 和部分应用类型,可用于创建有偏差的函子等……或者这些(部分应用类型)是否成为 Dotty 中的“一等公民”?
编辑
为了回答评论中的问题,这里有一个有点人为的例子,可以使用他的 this 。让我们假设,我Managers实际上是 Akka Actors …
常规scala集合有一个漂亮的collect方法,它允许我filter-map使用部分函数在一个传递中执行操作.火花上有相同的操作Dataset吗?
我想它有两个原因:
filter-map样式操作减少到一次通过(尽管在火花中我猜测有优化可以为你发现这些东西)这是一个显示我的意思的例子.假设我有一系列选项,我想提取并加倍定义的整数(a中的那些Some):
val input = Seq(Some(3), None, Some(-1), None, Some(4), Some(5))
Run Code Online (Sandbox Code Playgroud)
方法1 - collect
input.collect {
case Some(value) => value * 2
}
// List(6, -2, 8, 10)
Run Code Online (Sandbox Code Playgroud)
这collect使得这个语法非常简洁,并且一次通过.
方法2 - filter-map
input.filter(_.isDefined).map(_.get * 2)
Run Code Online (Sandbox Code Playgroud)
我可以将这种模式带到火花上,因为数据集和数据框有类似的方法.
但是,我不喜欢这个这么多,因为isDefined和get看起来像代码异味给我.有一个隐含的假设,即地图只接收Somes.编译器无法验证这一点.在一个更大的例子中,开发人员更难发现这种假设,开发人员可能会交换过滤器并映射,例如,不会出现语法错误.
方法3 - fold*操作
input.foldRight[List[Int]](Nil) {
case (nextOpt, acc) => nextOpt match {
case Some(next) => next*2 :: acc
case None => …Run Code Online (Sandbox Code Playgroud) 我已经宣布了这一系列的工会:
union Function {
char* name;
double (*fnct)();
int args;
};
union Function functions[] = {
{.name = "acos", .fnct = acos, .args = 1},
{.name = "asin", .fnct = asin, .args = 1},
{.name = "atan", .fnct = atan, .args = 1},
};
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用它时,我得到一个Segmentation fault错误.
for(int i = 0; i < sizeof(functions) / sizeof(union Function); i++) {
printf("%d\n", functions[i].args);
printf("%s\n", functions[i].name); //HERE!
}
Run Code Online (Sandbox Code Playgroud) scala ×6
apache-spark ×4
arrays ×1
bash ×1
c ×1
confd ×1
dotty ×1
javascript ×1
keras ×1
reactjs ×1
scala-3 ×1
shell ×1
tensorflow ×1
timestamp ×1
unions ×1