假设您已经将一些案例类的集合写到了实木复合地板上,然后想在另一个spark作业中读取它,回到同一案例类(也就是说,您已经编写了一些List[MyCaseClass]
并且想读回它)。
为了通用起见,假设其中MyCaseClass
有嵌套的案例类。
目前,我只能使用以下代码蓝图使此工作正常:
/** applies the secret sauce for coercing to a case class that is implemented by spark's flatMap */
private def toCaseClass(spark : SparkSession, inputDF : DataFrame) : Dataset[MyCaseClass] = {
import spark.implicits._
inputDF.as[MyCaseClass].flatMap(record => {
Iterator[MyCaseClass](record)
})
}
Run Code Online (Sandbox Code Playgroud)
似乎在Spark 2.x中,flatMap
将导致进行转换/强制转换的实验性Spark 代码(当使用调试器查看该代码时,在Spark 代码库中将其注释为实验性)。显然,在Java / Scala中,序列化通常是一个棘手的问题。还有其他安全的方法吗?
除星火之外,我发现在其他地方建议的独立代码解决方案在stackoverflow上不稳定,并且支持不佳。
我正在寻找不需要手动编码的干净,声明性方法,即如何转换每个字段,这些方法依赖于受良好支持的实体库,而这些库不依赖于超慢反射而无法克服优雅。这可能是绝望的混合,但这是一种以其案例类为傲并且将Spark作为其主要成就之一的语言。
相反,也欢迎评论为什么不使用案例类!
重要的是我的场景是开发一个可访问性应用程序而不是任何类型的恶意窃听,而在这个场景中还有各种研究和开发隐含场景,所有这些都应该从能够通过多个读取麦克风音频流中受益匪浅同时运行不相关的进程,例如记录工具和/或我自己的代码的不同版本。
我正在使用高级 python API 读取麦克风输入流,如下所示:
import sounddevice
audio_stream = sounddevice.InputStream(
device=self.microphone_device,
channels=max(self.channels),
samplerate=self.audio_props['sample_rate'],
blocksize=int(self.audio_props['frame_elements_size']),
callback=self.audio_callback)
Run Code Online (Sandbox Code Playgroud)
我想了解是否可以(在 linux 上)将麦克风音频流同时读取到另一个程序,例如 Google Meet / Zoom 读取它。即有效地共享音频流。
与前面提到的 python 包装器一样,当视频通话正在进行时启动上述代码时,它只会无法打开流,这不足为奇:
Expression 'paInvalidSampleRate' failed in
'src/hostapi/alsa/pa_linux_alsa.c', line: 2043
Expression 'PaAlsaStreamComponent_InitialConfigure( &self->playback, outParams, self->primeBuffers, hwParamsPlayback, &realSr )'
failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2716
Expression 'PaAlsaStream_Configure( stream, inputParameters, outputParameters, sampleRate, framesPerBuffer, &inputLatency, &outputLatency, &hostBufferSizeMode )'
failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2837
Run Code Online (Sandbox Code Playgroud)
诚然,我还不是很精通 ALSA 术语和一般的 linux 上的声音堆栈。
我的问题是,这可以直接使用 ALSA 库 API 来完成,还是通过其他声音堆栈或声音系统配置来完成?或者,如果所有其他方法都不起作用,通过代理程序/驱动程序能够向多个消费者公开音频缓冲区,而不会导致音频流延迟明显下降?
Netty 4发出警告"丢弃在管道末端到达的1个入站消息.请检查您的管道配置".这是什么意思?应该如何处理?(以前在这里复制,直到根据已接受的答案解决,但我宁愿对其含义以及管道如何工作有一般解释)
尝试最大化网络反馈,客户端管道设置如下:
pipeline.addLast("logger", new LoggingHandler(LogLevel.TRACE))
pipeline.addLast("HttpRequestEncoder", new HttpClientCodec)
pipeline.addLast("handler", new myHandler)
Run Code Online (Sandbox Code Playgroud)
所有我都在Netty的客户端登录,而两个http消息由它发送并成功接收并由服务器端确认:
12 [main] DEBUG io.netty.util.internal.InternalLoggerFactory - Using Log4J as the default logging framework
164 [nioEventLoopGroup-1-2] DEBUG io.netty.channel.nio.SelectorUtil - Using select timeout of 500
164 [nioEventLoopGroup-1-2] DEBUG io.netty.channel.nio.SelectorUtil - Epoll-bug workaround enabled = false
229 [nioEventLoopGroup-1-2] WARN io.netty.channel.DefaultChannelPipeline - Discarded 1 inbound message(s) that reached at the end of the pipeline. Please check your pipeline configuration.
230 [nioEventLoopGroup-1-2] WARN io.netty.channel.DefaultChannelPipeline - Discarded 1 inbound message(s) that reached …
Run Code Online (Sandbox Code Playgroud) 我想要一个对象类型,该对象类型在概念上包括三部分信息:
尽可能重要的是,该对象类型应被认为是持有文本文档内容的基础-通过具有实例的可迭代性。
我目前正在将其实现为类层次结构,其中有一个包含1和2的第一个类,然后有两个继承它的类,一个称为“单词”,另一个称为“标点符号”,如下所示:
abstract class TextElement(initContent: String, initStyleMap: Map[String, String]) {
val content : String = initContent
val styleMap: Map[String, String] = initStyleMap
}
case class Word(initContent: String, initStyleMap: Map[String, String]) extends TextElement(initContent: String, initStyleMap: Map[String, String]) {
}
case class Punctuation(initContent: String, initStyleMap: Map[String, String]) extends TextElement(initContent: String, initStyleMap: Map[String, String]) {
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有比我刚刚描述的第一个直觉更合适的方法,因为Scala中可能有更精简的方法。
值得注意的是,我将拥有这些对象的数千个实例,因此内存占用空间以及快速访问数据非常重要。我的幼稚实现感觉有点样板,也许还有其他方法被我忽略了。
因此,我想知道是否有一种可行的方法与这种直观的方法不同,可能会带来任何好处。同样,是否可以使以上代码更简洁/简洁。
我有这行代码,我使用我所知道的最惯用的方式来解析从函数返回的对象:
val (a, b) = foo match { case MyObjectType(a, b) => (a, b) }
Run Code Online (Sandbox Code Playgroud)
该对象的原型是:
case class MyObjectType(Type1: SomeType1, Type2: SomeType2)
Run Code Online (Sandbox Code Playgroud)
当然我可以:
val returnType = foo
val (a, b) = (returnType.a, returnType.b)
Run Code Online (Sandbox Code Playgroud)
但后者则是说明同一问题的另一种形式 - 这实际上并不优雅.一个Scala宏可以拯救提供一个简洁的成语吗?也许允许语法如下:
val (a, b) = foo deconstruct { MyObjectType(a, b) => (a, b) } // merely more shorthand, like scala allows e.g. within a map block
val (a, b) = tuplize(foo) // assumes tuplize can iterate the vals of MyObjectType
tupleResult(a, b) = foo // …
Run Code Online (Sandbox Code Playgroud) 我有一个函数返回一个元组,其中一个项目也是一个元组.
def foo: (Any, (Any, Any))
Run Code Online (Sandbox Code Playgroud)
实际的类型并不是真的,Any
但这是对实际代码的简化(因此我为了这个问题将其复制为复合元组).
现在我解释这个元组如下,希望用a1,a2,a3进行计算.
val (a1, bar) = foo
val (a2, a3) = bar
Run Code Online (Sandbox Code Playgroud)
这有一个班轮吗?
我似乎无法找到下面第一次驱逐的根本原因.如下所示,运行evicted
不提供与其相关的详细信息.
这一切都发生在project/plugins.sbt中添加之后:
libraryDependencies += "io.spray" %% "spray-json" % "1.3.1"
[warn] There may be incompatibilities among your library dependencies.
[warn] Here are some of the libraries that were evicted:
[warn] * io.spray:spray-json_2.10:1.2.6 -> 1.3.1
[warn] Run 'evicted' to see detailed eviction warnings
[projectName] $ evicted
[info] Resolving jline#jline;2.12.1 ...
[info] Done updating.
[warn] There may be incompatibilities among your library dependencies.
[warn] Here are some of the libraries that were evicted:
[warn] * com.googlecode.efficient-java-matrix-library:ejml:0.23 -> 0.19 (caller: …
Run Code Online (Sandbox Code Playgroud) 在我的Sublime Text 3(build 3065)中,ES6字符串插值反引号似乎混淆了html文件中的语法高亮.例如
console.log(`"`)
Run Code Online (Sandbox Code Playgroud)
会导致语法高亮显示假设我们在这里有一个不匹配的引用,而不是认为这是一个由反引号引用的单引号 - 这使得源文件的其余部分在代码突出显示方面无用.
这是在更新的版本或附加组件中解决的吗?
同时我可以通过在评论中关闭虚构的引用来解决它.
console.log(`"`) // "
Run Code Online (Sandbox Code Playgroud) 我想将单个数据帧列的整个串联导出到一个文件中,用作一个大文本 blob,用于下游无监督机器学习任务。(在字符串之间给出或采用分隔符)。
看起来 pandas csv writer 不是为这种特殊情况构建的,它坚持要转义字符,实际上应该这样做。
df.to_csv('output.txt', columns = ['tokens'], header=False, index=False, quoting=csv.QUOTE_NONE)
Run Code Online (Sandbox Code Playgroud)
_csv.Error: 需要转义,但没有转义字符集
这是非常可以理解的,因为 csv 包将它们的方法范围限定为对称,而不是逃避意味着单向街道。
考虑到数据帧至少有一百万行,您将如何有效地吐出单个数据帧列值的串联?
我在Heroku上为rails应用程序设置了NewRelic.我注意到NewRelic正在从rails环境定义中确定应用程序名称.这是通过newrelic.yml配置文件中的app_name变量调解的.但是,我在不同的Heroku应用程序上运行相同的rails环境,每个应用程序用于不同的开发测试或暂存目的.所以我们完全不希望所有这些应用程序(尽管使用相同的rails环境)报告回相同的NewRelic'应用程序'.在NewRelic中根本没有提供任何价值 - 相反,每个Heroku应用程序应该是NewRelic中自己的'应用程序',否则我们只会为所有那些运行不同负载或测试的应用程序的不同源版本的应用程序获得一个无用的聚合模拟.
什么应该是最直接和最可靠的配置分离方式?
谢谢!
PS当然对于我们的生产环境我们确实希望将所有dynos报告为一个NewRelic应用程序.只是不适合不同的登台/测试环境.
scala ×4
alsa ×1
apache-spark ×1
audio ×1
ecmascript-6 ×1
heroku ×1
jack ×1
libalsa ×1
macros ×1
netty ×1
newrelic ×1
pandas ×1
parquet ×1
pulseaudio ×1
python ×1
sbt ×1
sublimetext3 ×1