我已成功实现了reflectionEquals方法,其中包含一个排除字段列表.
return EqualsBuilder.reflectionEquals(this, obj, new String[] {"files", "notes", "status"});
Run Code Online (Sandbox Code Playgroud)
但是,我最近在Java 1.5上编译了我的程序,现在当程序遇到上述行时出现以下错误:
java.lang.NoSuchMethodError:org.apache.commons.lang.builder.EqualsBuilder.= reflectionEquals(Ljava/lang/Object; Ljava/lang/Object; [Ljava/lang/String;)Z
如果有人了解该方法在运行时不存在的原因,我将不胜感激
假设我创建了一个B类实例,它有一个静态变量x,在B类声明中赋值为3.在main()方法中,我这样做:
B b = new B();
b.x = 7; //allowed to use an instance to set the static member value
Run Code Online (Sandbox Code Playgroud)
在此之后,b被序列化然后反序列化.然后,出现以下行:
System.out.println ("static: " + b.x);
Run Code Online (Sandbox Code Playgroud)
有什么价值?7或3?
我知道静态变量不是序列化的,但是,因为整个类只有一个静态成员的副本,并且该值设置为7,如果在反序列化实例后保留它?
我有一个PySpark数据框,在列中包含时间戳(调用列'dt'),如下所示:
2018-04-07 16:46:00
2018-03-06 22:18:00
Run Code Online (Sandbox Code Playgroud)
当我执行:
SELECT trunc(dt, 'day') as day
Run Code Online (Sandbox Code Playgroud)
...我期望:
2018-04-07 00:00:00
2018-03-06 00:00:00
Run Code Online (Sandbox Code Playgroud)
但我得到了:
null
null
Run Code Online (Sandbox Code Playgroud)
我如何截断到一天而不是一小时?
在 Pyspark 2.3 中,假设我有一个如下所示的 JSON 文档:
{
"key1": {
"key2": "abc",
"KEY2": "def"
}
}
Run Code Online (Sandbox Code Playgroud)
实际上,我有数十亿个这样的文档,每个文档都有可能有数百(甚至数千)个周期性变化的深度嵌套结构。但是这个简单的文档说明了这个问题。
如果我做:
df = session.read.json(<file>)
df.select('key1.key2')
df.select('key1.KEY2')
Run Code Online (Sandbox Code Playgroud)
两个选择都将失败并显示如下错误:
pyspark.sql.utils.AnalysisException: 'Ambiguous reference to fields StructField(key2,StringType,true), StructField(KEY2,StringType,true);'
Run Code Online (Sandbox Code Playgroud)
由于模式的广度及其不断变化的性质,通过 StructType 结构对模式进行硬编码是不切实际的。
我该如何处理这种情况?理想情况下,我有一种方法可以重命名重复的列,这样它们就不会发生冲突(例如,'key2_0'、'KEY2_1' 等)。不幸的是,我找不到任何方法来迭代列列表或更改列名,而无需首先能够通过名称明确引用列。