我使用Ubuntu 14.04服务器(8核,16 GB RAM)来托管PHP网站,MySQL和Redis.PHP Web和MySQL的流量非常低(MySQL:每秒查询数:0.825).Redis每秒处理8011个命令.
今天我注意到nc保持在最高位置top:
8348 root 20 0 11224 764 624 R 100.0 0.0 2277:01 nc
8319 root 20 0 11224 760 624 R 100.0 0.0 2277:59 nc
8324 root 20 0 11224 764 624 R 100.0 0.0 2278:09 nc
8344 root 20 0 11224 760 624 R 100.0 0.0 2277:07 nc
Run Code Online (Sandbox Code Playgroud)
Stracing nc给出:
root@host:/home/user# strace -p 8348
Process 8348 attached
poll([{fd=3, events=POLLIN}, {fd=-1}], 2, 1000) = 1 ([{fd=3, revents=POLLERR}])
poll([{fd=3, events=POLLIN}, {fd=-1}], 2, 1000) = …Run Code Online (Sandbox Code Playgroud) 我想将我的集合写入 .parquet 文件,以便以后可以使用 Spark 读取它。
到目前为止,我正在使用以下代码创建文件:
package com.contrib.parquet
import org.apache.avro.SchemaBuilder
import org.apache.avro.reflect.ReflectData
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.Path
import org.apache.parquet.avro.AvroParquetWriter
import org.apache.parquet.hadoop.{ParquetFileWriter, ParquetWriter}
import org.apache.parquet.hadoop.metadata.CompressionCodecName
object ParquetWriter {
def main(args: Array[String]): Unit = {
val schema = SchemaBuilder
.record("Record")
.fields()
.requiredString("name")
.requiredInt("id")
.endRecord()
val writer: ParquetWriter[Record] = AvroParquetWriter
.builder(new Path("/tmp/parquetResult"))
.withConf(new Configuration)
.withDataModel(ReflectData.get)
.withCompressionCodec(CompressionCodecName.SNAPPY)
.withSchema(schema)
.withWriteMode(ParquetFileWriter.Mode.OVERWRITE)
.build()
Seq(Record("nameOne", 1), Record("nameTwo", 2)).foreach(writer.write)
writer.close()
}
case class Record(name: String, id: Int)
}
Run Code Online (Sandbox Code Playgroud)
它成功地创建了一个镶木地板文件。当我尝试使用 spark 读取该文件时,java.lang.NoSuchMethodError: org.apache.parquet.column.values.ValuesReader.initFromPage出现错误。
火花代码:
val master = "local[4]"
val …Run Code Online (Sandbox Code Playgroud) 我坚持一个似乎很简单的命令连接,但无法解决它.
我有一个between()功能,它执行以下操作:
/**
* Checks if passed int is between $left and $right
* @param int $left lowest value
* @param int $right highest value
* @param int $value actual value
* @return bool is $value between $left and $right
*/
function between($left, $right, $value)
{
$value = intval($value);
return ( $value >= $left && $value <= $right );
}
Run Code Online (Sandbox Code Playgroud)
而且使用非常简单:
$int = 9;
var_dump( between( 6, 14, $int ) );//bool(true) Run Code Online (Sandbox Code Playgroud)
现在我想要实现的是:
$int = 9;
var_dump( $int.between( 6, …Run Code Online (Sandbox Code Playgroud) 我想支持Json和Parquet文件格式。客户端不必关心其实现,但是必须传递一种类型来标识格式。
到目前为止,我有两个具有此类签名的类:
class ParquetFileWriter[T](val path: String)(implicit val writer: ParquetWriter[T]) extends FileWriter[T]
Run Code Online (Sandbox Code Playgroud)
和
class JsonFileWriter[T](val path: String)(implicit writer: JsonWriter[T]) extends FileWriter[T]
Run Code Online (Sandbox Code Playgroud)
他们扩展的特征:
trait FileWriter[T] {
def write(items: Seq[T]): Unit
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个工厂类来通过参数构建类:
class Factory {
def of[T](format: Format): FileWriter[T] = {
format match {
case ParquetSpark =>
new ParquetFileWriter[T](defaultPath)
case Json =>
new JsonFileWriter[T](defaultPath)
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是ParquetFileWriter和JsonFileWriter需要隐式变量(当它们从spray.json和com.github.mjakubowski84.parquet4s库到达时,它们不在我的控制范围之内。
如果格式依赖于不同的隐式函数,如何实现工厂格式?我在编译时收到“找不到隐式值”。
我在他们的标题中有一个网站上有这个符号()(参见这个标题,它也在那里).它也被黑客新闻采集并显示为角色.我想知道它是什么以及它是如何工作的?
编辑:我附上了截图
