我有一个df_a
带有id信息的数据框:
unique_id lacet_number
15 5570613 TLA-0138365
24 5025490 EMP-0138757
36 4354431 DXN-0025343
Run Code Online (Sandbox Code Playgroud)
和另一个数据帧df_b
,我知道的行数对应于以下行df_a
:
latitude longitude
0 -93.193560 31.217029
1 -93.948082 35.360874
2 -103.131508 37.787609
Run Code Online (Sandbox Code Playgroud)
我想要做的只是简单地解决这两个问题并得到:
unique_id lacet_number latitude longitude
0 5570613 TLA-0138365 -93.193560 31.217029
1 5025490 EMP-0138757 -93.948082 35.360874
2 4354431 DXN-0025343 -103.131508 37.787609
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
df_c = pd.concat([df_a, df_b], axis=1)
Run Code Online (Sandbox Code Playgroud)
这给了我一个外连接.
unique_id lacet_number latitude longitude
0 NaN NaN -93.193560 31.217029
1 NaN NaN -93.948082 35.360874
2 NaN NaN -103.131508 37.787609
15 5570613 TLA-0138365 NaN …
Run Code Online (Sandbox Code Playgroud) 我可以在一定范围内生成一个随机的数字序列,如下所示:
fun ClosedRange<Int>.random() = Random().nextInt(endInclusive - start) + start
fun generateRandomNumberList(len: Int, low: Int = 0, high: Int = 255): List<Int> {
(0..len-1).map {
(low..high).random()
}.toList()
}
Run Code Online (Sandbox Code Playgroud)
然后我将不得不延伸List
:
fun List<Char>.random() = this[Random().nextInt(this.size)]
Run Code Online (Sandbox Code Playgroud)
然后我可以这样做:
fun generateRandomString(len: Int = 15): String{
val alphanumerics = CharArray(26) { it -> (it + 97).toChar() }.toSet()
.union(CharArray(9) { it -> (it + 48).toChar() }.toSet())
return (0..len-1).map {
alphanumerics.toList().random()
}.joinToString("")
}
Run Code Online (Sandbox Code Playgroud)
但也许有更好的方法?
我有一个来自fieldNames的字符串迭代器JsonNode
:
val mm = ... //JsonNode
val xs = mm.fieldNames()
Run Code Online (Sandbox Code Playgroud)
我想在保持计数的同时循环遍历字段,例如:
when mm.size() {
1 -> myFunction1(xs[0])
2 -> myFunction2(xs[0], xs[1])
3 -> myFunction3(xs[0], xs[1], xs[2])
else -> print("invalid")
}
Run Code Online (Sandbox Code Playgroud)
显然上面的代码不起作用,因为xs
Iterator不能像这样索引.我试图看看我是否可以将迭代器转换为list by mm.toList()
但不存在.
我怎样才能做到这一点?
我搜索过SO试图找到一个无济于事的解决方案.所以这就是.我有一个包含许多列的数据框,其中一些是数字的,应该是非负的.我想清理数据,因为这些数值列中的某些值是负数.我现在能做的是用正则表达式提取这些列的列名.但我不确定如何基于这些列实现行的过滤.
举个例子,让我们说:
library(dplyr)
df <- read.table(text =
"id sth1 tg1_num sth2 tg2_num others
1 dave 2 ca 35 new
2 tom 5 tn -3 old
3 jane -3 al 0 new
4 leroy 0 az 25 old
5 jerry 4 mi 55 old", header=TRUE)
pattern <- "_num$"
ind <- grep(pattern, colnames(df))
target_columns <- colnames(df)[ind]
df <- df %>% filter(target_columns >= 0) # it's is wrong, but it's what I want to do
Run Code Online (Sandbox Code Playgroud)
我想从这个过滤中获得的是以下内容:
id sth1 tg1_num sth2 tg2_num others
1 …
Run Code Online (Sandbox Code Playgroud) 假设我在数据库中有2个表,一个叫students
,另一个叫departments
.students
看起来如下:
department_id, student_id, class, name, age, gender, rank
Run Code Online (Sandbox Code Playgroud)
和departments
看起来像:
department_id, department_name, campus_id, number_of_faculty
Run Code Online (Sandbox Code Playgroud)
我有一个API可以查询数据库并从2个表中检索各种信息.例如,我有一个终点,可以通过加入2个表来获得每个校园的学生数量.
我想为我的API端点进行集成测试.为此,我启动了一个本地数据库,运行数据库模式的迁移以创建表,然后用人工记录填充每个表,以便我确切知道数据库中的内容.但是,提出一个良好的播种过程已经证明是不容易的.对于上面描述的简单示例,我当前的方法涉及为每列生成多个不同的记录.例如,我需要至少2个校区(说main
和satellite
),和3个部门(比如Electrical Engineering
和Mathematics
对main
校园English
的satellite
校园).然后我需要每个部门至少2名学生或总共6名学生.如果我在混合gender
,age
和rank
,你可以很容易地看到,人工记录的数量呈指数级增长.提出所有这些人工记录是手动的,因此很难维护.
所以我的问题是:一般来说,为集成测试设置和种子数据库的正确方法是什么?
I have multiple lists, for the sake of simplicity, let's say 2:
val names = listOf("John", "Tom")
val days = listOf(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
And I want to iterate over all the combinations of these possible values with a function f: (String, Int): Unit
:
f("John", 1)
f("John", 2)
f("John", 3)
f("Tom", 1)
f("Tom", 2)
f("Tom", 3)
Run Code Online (Sandbox Code Playgroud)
I'd like to find out the idiomatic way to do this in kotlin. Off the top of my head, I imagine that this can …
我有一个包含许多列的数据框,例如:
df:
name salary age title
John 100 35 eng
Bill 200 NaN adm
Lena NaN 28 NaN
Jane 120 45 eng
Run Code Online (Sandbox Code Playgroud)
我想替换工资和年龄中的空值,但是在其他列中没有.我知道我可以这样做:
u = df[['salary', 'age']]
df[['salary', 'age']] = u.fillna(-1)
Run Code Online (Sandbox Code Playgroud)
但这似乎很简洁,因为它涉及复制.有没有更有效的方法来做到这一点?
在玩具示例中简单明了地展示了如何在spark中编程.您只需导入,创建,使用和丢弃所有功能.
import org.apache.spark._
import org.apache.spark.sql._
import org.apache.spark.sql.hive.HiveContext
def main(args: String) {
val conf = new SparkConf().setAppName("example")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
val hiveContext = new HiveContext(sc)
import hiveContext.implicits._
import hiveContext.sql
// load data from hdfs
val df1 = sqlContext.textFile("hdfs://.../myfile.csv").map(...)
val df1B = sc.broadcast(df1)
// load data from hive
val df2 = sql("select * from mytable")
// transform df2 with df1B
val cleanCol = udf(cleanMyCol(df1B)).apply("myCol")
val df2_new = df2.withColumn("myCol", cleanCol)
...
sc.stop()
}
Run Code Online (Sandbox Code Playgroud)
在现实世界中,我发现自己编写了很多函数来模块化任务.例如,我只有几个函数来加载不同的数据表.在这些加载函数中,我会调用其他函数在加载数据时进行必要的数据清理/转换.然后我会像这样传递上下文:
def loadHdfsFileAndBroadcast(sc: …
Run Code Online (Sandbox Code Playgroud) 我有一个 cassandra 表,它有一个复合主键:(school_id, student_id)
。假设我想删除该表中属于一所学校的所有记录。使用 cassandra 驱动程序,我尝试仅绑定school_id
类似的内容:
val query = QueryBuilder.delete().all().from(session.loggedKeyspace, "mytable")
.where(QueryBuilder.eq("school_id", QueryBuilder.bindMarker())
.bind("school_1")
session.execute(query)
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:
com.datastax.driver.core.exceptions.InvalidQueryException: Missing mandatory PRIMARY KEY part student_id
Run Code Online (Sandbox Code Playgroud)
我可以在一所学校拥有数千名学生。我是否必须先查询表以获取所有不同的student_id
s,然后使用此删除语句?
我有一个包含多个public static void main
( psvm
) 的 .jar,我希望在对docker run ... -e <class.path.from.env>
图像执行操作并传递环境变量来指定类路径时能够调用它们。像这样的东西:
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<configuration>
<images>
<image>
<name>${project.artifactId}</name>
<build>
<from>java:8-jre</from>
<tags>
<tag>${build.environment}-latest</tag>
<tag>${build.environment}-${build.number}</tag>
</tags>
<entryPoint>
<exec>
<arg>java</arg>
<arg>-Duser.timezone=UTC</arg>
<arg>-cp</arg>
<arg>/opt/${project.artifactId}-${project.version}.jar</arg>
<arg>${class.path.from.env}</arg>
</exec>
</entryPoint>
<assembly>
<basedir>/opt</basedir>
<inline>
<files>
<file>
<source>target/${project.artifactId}-${project.version}.jar</source>
</file>
</files>
</inline>
</assembly>
</build>
</image>
</images>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
尽管我阅读了 的整个文档docker-maven-plugin
,但我不确定如何才能完成这项工作。基本上我在哪里声明环境变量class.path.from.env
以及如何确保它获得我传递的-e
环境变量docker run ...
?