我有一个Fortran子程序采用假定的大小数组:
subroutine sub(arr)
implicit none
double precision arr(*)
end subroutine
Run Code Online (Sandbox Code Playgroud)
我使用JNA从Java进行本机调用,Fortran子例程被编译为共享库mylib.so
:
import com.sun.jna.Library;
import com.sun.jna.Native;
public class Wrapper {
public interface MyLib extends Library {
public void sub_(double[] arr);
}
public static void main(String[] args) {
System.setProperty("jna.library.path", ".");
MyLib lib = (MyLib) Native.loadLibrary("mylib.so", MyLib.class);
double[] myarr = new double[10];
lib.sub_(myarr);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,有没有办法得到(在Fortran子程序中)我传递给这个子程序的数组的大小而不传递实际大小(在这种情况下为10)作为附加参数?
我尝试过(Fortran)print*, size(arr)
,但这会产生编译错误:
print*,size(arr)
1
Error: The upper bound in the last dimension must appear in the reference to the assumed size array ‘arr’ …
Run Code Online (Sandbox Code Playgroud) 我正在努力处理在由浮点数结构组成的数据帧(源自配置单元表)上运行的UDF中的空值:
数据框(points
)具有以下架构:
root
|-- point: struct (nullable = true)
| |-- x: float (nullable = true)
| |-- y: float (nullable = true)
Run Code Online (Sandbox Code Playgroud)
例如,我要计算x和y的总和。请注意,我不“处理”空值在下面的例子,但我希望能够在我的UDF检查是否point
,x
或者y
是null
。
第一种方法:
val sum = udf((x:Float,y:Float) => x+y)
points.withColumn("sum",sum($"point.x",$"point.y"))
Run Code Online (Sandbox Code Playgroud)
如果该struct
点为null
,则此方法不起作用,在这种情况下,永远不会评估udf(永远不会执行udf中的代码!),结果为null。另外,我无法检查x
或y
为null,因为Floats
在scala中不能为null。
第二种方法:
val sum = udf((pt:Row) => pt.getFloat(0)+pt.getFloat(1))
points.withColumn("sum",sum($"point"))
Run Code Online (Sandbox Code Playgroud)
使用这种方法,我可以pt
在udf中检查是否为空,但是我可以检查x
并且y
因为Floats
不能为空。NullPointerException
在这种情况下,我得到一个。
如何编写udf win,可以检查struct以及x和y是否为null?
我正在使用spark 1.6.1
更新:与这个问题相反,我在处理浮点数而不是字符串(scala中的字符串可以为null,而浮点数则不是)
I want to convert a given date time (which is a utc date time) to the corresponding date time in CET with a proper mapping of the european summer/winter time switch (daylight saving time). I managed to to the opposite (CET to UTC) using java.time
:
public static LocalDateTime cetToUtc(LocalDateTime timeInCet) {
ZonedDateTime cetTimeZoned = ZonedDateTime.of(timeInCet, ZoneId.of("CET"));
return cetTimeZoned.withZoneSameInstant(ZoneOffset.UTC).toLocalDateTime();
}
Run Code Online (Sandbox Code Playgroud)
But I fail to go the opposite way:
public static LocalDateTime utcToCet(LocalDateTime timeInUtc) {
ZonedDateTime cetTimeZoned = ZonedDateTime.of(timeInUtc,ZoneId.of("UTC"));
return cetTimeZoned.withZoneSameInstant(ZoneOffset.of(???)).toLocalDateTime(); …
Run Code Online (Sandbox Code Playgroud) 我想修改这里给出的代码:Find min and max elements of array
def minMax(a: Array[Int]) : (Int, Int) = {
if (a.isEmpty) throw new java.lang.UnsupportedOperationException("array is empty")
a.foldLeft((a(0), a(0)))
{ case ((min, max), e) => (math.min(min, e), math.max(max, e))}
}
Run Code Online (Sandbox Code Playgroud)
也可以使用Long
, Float
and Double
(因为这些是 scala.math.min/max 接受的类型。我试过:
def getMinAndMax[@specialized(Int,Long,Float,Double) T](x: Seq[T]) : (T, T) = {
if (x.isEmpty) throw new java.lang.UnsupportedOperationException("seq is empty")
x.foldLeft((x.head, x.head))
{ case ((min, max), e) => (math.min(min, e), math.max(max, e))}
}
Run Code Online (Sandbox Code Playgroud)
但这也不能编译。有什么建议吗?
我是气候学家,经常使用"蓝色到白色到红色"的色彩图来绘制温度场的异常.为了使图表更具可读性,我使用我在互联网上"找到"的功能将颜色图在一定数量的级别(箱子)中离散化(但我真的不明白):
像这样的东西:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
import matplotlib.colors as cols
from numpy.random import randn
def cmap_discretize(cmap, N):
colors_i = np.concatenate((np.linspace(0, 1., N), (0.,0.,0.,0.)))
colors_rgba = cmap(colors_i)
indices = np.linspace(0, 1., N+1)
cdict = {}
for ki,key in enumerate(('red','green','blue')):
cdict[key] = [ (indices[i], colors_rgba[i-1,ki], colors_rgba[i,ki]) for i in xrange(N+1) ]
# Return colormap object.
return cols.LinearSegmentedColormap(cmap.name + "_%d"%N, cdict, 1024)
cmap_disc= cmap_discretize(cm.RdBu_r,12)
fig, ax = plt.subplots()
data = np.clip(randn(250, 250), -1, 1)
cax …
Run Code Online (Sandbox Code Playgroud) 我正在使用PrimeFaces的简单fileUpload
和自定义提交按钮,如下所示:
<h:form enctype="multipart/form-data">
<p:fileUpload value="#{fileController.file}"
mode="simple"
skinSimple="true"
label="choose file"/>
<p:commandButton value="upload"
ajax="false"
label="upload"
icon="fa fa-upload"
actionListener="#{fileController.upload}"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)
在backing bean中,file
是一个类型的属性UploadedFile
.
现在我想要upload
在没有选择文件的情况下禁用该按钮,但是我无法获得信息,无论用户是否选择了文件,file
属性都会保留,null
直到upload
单击该按钮为止.我试过valueChangeListener
的上<p:fileUpload>
部件,但是当我点击上传按钮的事件仅触发(但后来为时已晚)
有人有建议吗?
我对 JavaFX8 相当陌生,面临以下问题。在我当前用于文档处理/编辑的应用程序中,我有两个相当昂贵的任务。打开文档并保存文档。
我的应用程序有“导入下一个”、“导出当前”和“导出当前并导入下一个”按钮。对于导入和导出,我有两个结构如下的任务:
private class Export extends Task<Void> {
public Export() {
this.setOnRunning(event -> {
// do stuff (change cursor etc)
});
this.setOnFailed(event -> {
// do stuff, eg. show error box
});
this.setOnSucceeded(event -> {
// do stuff
});
}
@Override
protected Void call() throws Exception {
// do expensive stuff
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我使用 提交任务Executors.newSingleThreadExecutor();
。
对于“导出当前并导入下一个”功能,我的目标是将导出和导入任务提交给执行器,但我的导入任务仅应在导出任务成功并且给出的事件处理程序setOnSucceedded
(在 GUI 上运行)的情况下运行线程)完成。如果导出失败,则加载下一个文档没有任何意义,因为需要用户交互。如何才能实现这一目标?
首先,我厌倦了该call
方法中的整个逻辑/错误处理,但这不起作用,因为我无法从此方法更改 GUI(即显示错误框)。
作为解决方法,我在导出任务的最后一行手动提交导入任务setOnSucceeded
,但这不是很灵活,因为我想确保该任务仅导出(无需后续导入)...
我有一个包含许多双(和/或浮点)列的数据框,其中确实包含 NaN。我想用空值替换所有 NaN(即 Float.NaN 和 Double.NaN)。
我可以用例如单列来做到这一点x
:
val newDf = df.withColumn("x", when($"x".isNaN,lit(null)).otherwise($"x"))
Run Code Online (Sandbox Code Playgroud)
这有效,但我想一次对所有列执行此操作。我最近发现DataFrameNAFunctions
( df.na
)fill
听起来正是我需要的。不幸的是我没有做到以上几点。 fill
应该用给定的值替换所有 NaN 和空值,所以我这样做:
df.na.fill(null.asInstanceOf[java.lang.Double]).show
Run Code Online (Sandbox Code Playgroud)
这给了我一个 NullpointerException
还有一个很有前途的replace
方法,但我什至无法编译代码:
df.na.replace("x", Map(java.lang.Double.NaN -> null.asInstanceOf[java.lang.Double])).show
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这给了我
Error:(57, 34) type mismatch;
found : scala.collection.immutable.Map[scala.Double,java.lang.Double]
required: Map[Any,Any]
Note: Double <: Any, but trait Map is invariant in type A.
You may wish to investigate a wildcard type such as `_ <: Any`. (SLS 3.2.10)
df.na.replace("x", Map(java.lang.Double.NaN -> null.asInstanceOf[java.lang.Double])).show
Run Code Online (Sandbox Code Playgroud) 有一些关于使用 Python 进行 SnowPark 的问题。
当我们已经有了 Snowflake python 连接器(免费)可以使用 Snowflake DW 连接到 Python jupyter 时,为什么还需要 Snowpark?
如果我们使用snowpark并连接本地jupyter文件来运行ML模型。是用我们本地机器算力还是Snowflake算力?如果是我们本地机器算力我们怎么用Snowflake算力来运行ml模型呢?
使用pgf90编译器,是否可以在运行时获取可执行文件的名称?将此信息与svn修订号一起保存在输出中会很好(这已经在预处理期间实现并完成).
谢谢
我最近查看了scala多线程教程,并偶然发现了一个在Actor中实现的方法:
class MyActor extends Actor
def receive = {
case "test" => println("received test")
case _ => println("received unknown message")
}
}
Run Code Online (Sandbox Code Playgroud)
虽然我认为我知道该方法的作用,但我无法弄清楚如何使用这样的方法(在它没有任何参数).
Althouh这个例子是关于Akka的,我认为这与Akka无关
我有一个带有一堆实用程序方法的Scala对象,每个方法都使用一个隐式方法参数 s
object MyObject {
def a(implicit s:String) = ???
def b(implicit s:String) = ???
def c(implicit s:String) = ???
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢implicit s:String
在每个参数列表中需要这个的事实.有没有办法只设置s
一次变量(即首次访问对象时).对于一堂课,我会做这样的事情:
class MyClass(implicit s:String) {
def a() = ???
def b() = ???
def c() = ???
}
Run Code Online (Sandbox Code Playgroud) 我需要遍历一个列表,并将列表中的上一个元素与当前元素进行比较。从传统的编程背景开始,我使用带变量的循环来保存先前的值,但是对于Scala,我认为应该有一种更好的方法。
for (item <- dataList)
{
// Code to compare previous list element
prevElement = item
}
Run Code Online (Sandbox Code Playgroud)
上面的代码可以正常工作并给出正确的结果,但是我想探索编写相同代码的功能方法。
scala ×6
apache-spark ×2
fortran ×2
arrays ×1
concurrency ×1
file-upload ×1
generics ×1
implicits ×1
java ×1
javafx-8 ×1
jna ×1
jsf ×1
matplotlib ×1
numeric ×1
primefaces ×1
python ×1
python-3.x ×1
snowflake-cloud-data-platform ×1
snowpark ×1
timezone ×1
udf ×1