我试图从两个数据帧中取出样本,其中我需要保持计数的比率.例如
df1.count() = 10
df2.count() = 1000
noOfSamples = 10
Run Code Online (Sandbox Code Playgroud)
我想以这样一种方式对数据进行采样,即每个样本大小为101个样本(1个来自df1,100个来自df2)
现在这样做,
var newSample = df1.sample(true, df1.count() / noOfSamples)
println(newSample.count())
Run Code Online (Sandbox Code Playgroud)
这里的分数意味着什么?它可以大于1吗?我检查这个和这个,但没能完全理解它.
无论如何我们还可以指定要采样的行数吗?
我有一个带有可配置列名的数据框,例如
Journey channelA channelB channelC
j1 1 0 0
j1 0 1 0
j1 1 0 0
j2 0 0 1
j2 0 1 0
Run Code Online (Sandbox Code Playgroud)
通过可配置,我的意思是数据帧中可能有'n'个通道.
现在我需要进行转换,我需要找到所有通道的总和
df.groupBy("Journey").agg(sum("channelA"), sum("channelB"), sum("channelC"))
Run Code Online (Sandbox Code Playgroud)
其输出将是:
Journey sum(channelA) sum(channelB) sum(channelC)
j1 2 1 0
j2 0 1 1
Run Code Online (Sandbox Code Playgroud)
现在我想将列名重命名为原始名称,我可以使用
.withColumnRenamed("sum(channelA)", channelA)
Run Code Online (Sandbox Code Playgroud)
但正如我所提到的那样,通道列表是可配置的,我希望通用列重命名语句将所有求和列重命名为原始列名,以获得预期的数据帧:
Journey channelA channelB channelC
j1 2 1 0
j2 0 1 1
Run Code Online (Sandbox Code Playgroud)
任何建议如何处理这个
我一直在尝试将一个csv加载到R进行一些处理,但是在尝试读取数据本身时我遇到了一个奇怪的问题.
csv没有任何标题,我使用以下简单的代码来读取数据
newClick <- read.csv("test.csv", header = F)
Run Code Online (Sandbox Code Playgroud)
以下是样本数据集:
10000011791441224671,V_Display,exit
10000011951441812316,V_Display,exit
10000013211441319797,V_Display,exit
1000001331441725509,V_Display,exit
10000013681418242863,C_GoogleNonBrand,V_Display,V_Display,V_Display,V_Display,_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,exit
10000014031441295393,V_Display,exit
Run Code Online (Sandbox Code Playgroud)
该数据的输出是6 obs的预期数据帧.18个变量.
然而,这是棘手的部分.如果我在数据集中添加另一行,例如
10000011791441224671,V_Display,exit
10000011951441812316,V_Display,exit
1000000191441228436,V_Display,exit
10000013211441319797,V_Display,exit
1000001331441725509,V_Display,exit
10000013681418242863,C_GoogleNonBrand,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,exit
10000014031441295393,V_Display,exit
Run Code Online (Sandbox Code Playgroud)
这个输出是一个奇怪的12个3个变量.仔细分析后,我意识到整个倒数第二行被分为6行,每行有三列,这很奇怪.
有什么想法吗?
我正在使用以下配置单元查询:
this.queryExecutor.executeQuery("Drop table user")
Run Code Online (Sandbox Code Playgroud)
并得到以下异常:
java.lang.LinkageError: ClassCastException: attempting to castjar:file:/usr/hdp/2.4.2.0-258/spark/lib/spark-assembly-1.6.1.2.4.2.0-258-hadoop2.7.1.2.4.2.0-258.jar!/javax/ws/rs/ext/RuntimeDelegate.classtojar:file:/usr/hdp/2.4.2.0-258/spark/lib/spark-assembly-1.6.1.2.4.2.0-258-hadoop2.7.1.2.4.2.0-258.jar!/javax/ws/rs/ext/RuntimeDelegate.class
at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:116)
at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:91)
at javax.ws.rs.core.MediaType.<clinit>(MediaType.java:44)
at com.sun.jersey.core.header.MediaTypes.<clinit>(MediaTypes.java:64)
at com.sun.jersey.core.spi.factory.MessageBodyFactory.initReaders(MessageBodyFactory.java:182)
at com.sun.jersey.core.spi.factory.MessageBodyFactory.initReaders(MessageBodyFactory.java:175)
at com.sun.jersey.core.spi.factory.MessageBodyFactory.init(MessageBodyFactory.java:162)
at com.sun.jersey.api.client.Client.init(Client.java:342)
at com.sun.jersey.api.client.Client.access$000(Client.java:118)
at com.sun.jersey.api.client.Client$1.f(Client.java:191)
at com.sun.jersey.api.client.Client$1.f(Client.java:187)
at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
at com.sun.jersey.api.client.Client.<init>(Client.java:187)
at com.sun.jersey.api.client.Client.<init>(Client.java:170)
at org.apache.hadoop.yarn.client.api.impl.TimelineClientImpl.serviceInit(TimelineClientImpl.java:340)
at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163)
at org.apache.hadoop.hive.ql.hooks.ATSHook.<init>(ATSHook.java:67)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
at org.apache.hadoop.hive.ql.hooks.HookUtils.getHooks(HookUtils.java:60)
at org.apache.hadoop.hive.ql.Driver.getHooks(Driver.java:1309)
at org.apache.hadoop.hive.ql.Driver.getHooks(Driver.java:1293)
at org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1347)
at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1195)
at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1059)
at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1049)
at org.apache.spark.sql.hive.client.ClientWrapper$$anonfun$runHive$1.apply(ClientWrapper.scala:495)
at org.apache.spark.sql.hive.client.ClientWrapper$$anonfun$runHive$1.apply(ClientWrapper.scala:484)
at org.apache.spark.sql.hive.client.ClientWrapper$$anonfun$withHiveState$1.apply(ClientWrapper.scala:290)
at org.apache.spark.sql.hive.client.ClientWrapper.liftedTree1$1(ClientWrapper.scala:237)
at org.apache.spark.sql.hive.client.ClientWrapper.retryLocked(ClientWrapper.scala:236)
at …
Run Code Online (Sandbox Code Playgroud) 我有以下格式的数据:
df
uid String event
a djsan C
a fbja V
a kakal Conversion
b jshaj V
b jjsop C
c dqjka V
c kjkk Conversion
Run Code Online (Sandbox Code Playgroud)
我需要提取事件为转换的用户的所有行,因此预期结果应该是:
uid String event
a djsan C
a fbja V
a kakal Conversion
c dqjka V
c kjkk Conversion
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 Spark-sql 来实现同样的目的。我试图使用以下形式的简单子查询
Select * from df where uid in (Select uid from df where event = 'Conversion')
Run Code Online (Sandbox Code Playgroud)
但这给了我一个例外。
我还想看看我是否有 uid 的列表对象,我可以在 SQL 语句中使用它吗?如果是,如何使用?
list : List[String] = List('a','c')
Run Code Online (Sandbox Code Playgroud) 我有以下数据:
rowid uid time code
1 1 5 a
2 1 6 b
3 1 7 c
4 2 8 a
5 2 9 c
6 2 9 c
7 2 10 c
8 2 11 a
9 2 12 c
Run Code Online (Sandbox Code Playgroud)
现在我想以这样的方式过滤数据:我可以删除第6行和第7行,就像特定的uid一样,我希望在代码中只保留一行值为'c'的行
所以预期的数据应该是:
rowid uid time code
1 1 5 a
2 1 6 b
3 1 7 c
4 2 8 a
5 2 9 c
8 2 11 a
9 2 12 c
Run Code Online (Sandbox Code Playgroud)
我正在使用这样的窗口函数:
val window = Window.partitionBy("uid").orderBy("time") …
Run Code Online (Sandbox Code Playgroud) 我有以下数据框:
DF1
uid text frequency
1 a 1
1 b 0
1 c 2
2 a 0
2 b 0
2 c 1
Run Code Online (Sandbox Code Playgroud)
我需要在uid的基础上压扁它:
DF2
uid a b c
1 1 0 2
2 0 0 1
Run Code Online (Sandbox Code Playgroud)
我在R中使用了类似的行,但还是无法将其转换为sql或scala.
有关如何处理此问题的任何建议?
我需要根据我需要在组上应用的过滤操作来计算组中的记录数
DF
id dg cs
1 s 1
1 v 0
2 s 0
2 v 1
2 s 1
2 s 0
3 s 1
3 s 1
3 v 1
Run Code Online (Sandbox Code Playgroud)
我需要计算(或标记)"dg"中"v"之前"dg-cs"字段中出现's-1'组合的记录数.
因此,输出将是
id dg cs output
1 s 1 True
1 v 0 False
2 s 0 False
2 v 1 False
2 s 1 False
2 s 0 False
3 s 1 True
3 s 1 True
3 v 1 False
Run Code Online (Sandbox Code Playgroud)