我正在使用该randomSplit
函数来获取少量的数据帧以用于开发目的,我最终只取这个函数返回的第一个df.
val df_subset = data.randomSplit(Array(0.00000001, 0.01), seed = 12345)(0)
Run Code Online (Sandbox Code Playgroud)
如果我使用df.take(1000)
那么我最终得到一个行数组 - 而不是数据帧,所以这对我不起作用.
有没有更好,更简单的方法来说出df的前1000行并将其存储为另一个df?
我一直在尝试让用于读取CSV的数据库库工作.我正在尝试使用scala api将hive创建的TSV读入spark数据框.
这是一个可以在spark shell中运行的示例(我公开了示例数据,因此它可以为您工作)
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.types.{StructType, StructField, StringType, IntegerType};
val sqlContext = new SQLContext(sc)
val segments = sqlContext.read.format("com.databricks.spark.csv").load("s3n://michaeldiscenza/data/test_segments")
Run Code Online (Sandbox Code Playgroud)
该文件说,你可以指定分隔符,但我不清楚如何指定选项.
有没有一种简单的方法可以在图表上的圆圈中添加文字标签?我无法使用directlabels包,因为我收到错误:
direct.label.ggplot(p,"first.qp")出错:需要颜色审美来推断默认的直接标签."
这是图表:
这是我一直在使用的代码:
library(ggplot2)
library(directlabels)
#my data set:
oc <- read.csv("http://www.columbia.edu/~mad2200/oc.csv")
oc$percent_women <- oc$W_employment/(oc$M_employment+oc$W_employment)
oc$size <- oc$W_employment+oc$M_employment
p <- ggplot(oc, aes(M_w_earnings, W_w_earnings, label = as.character(Occupational.Group)))
p + geom_point(aes(size = size, colour=percent_women)) + scale_size_continuous(range=c(0,30)) + #scale_area()+
#geom_point(aes(colour = oc$percent_women)) +
coord_equal() +
scale_colour_gradient(high = "red")+
ylim(700, 1700) +
xlim(700, 1700) +
geom_abline(slope=1) +
labs(title = "Income Disparity by Occupation and Gender") +
ylab("Women's Weekly Earnings in $") +
xlab("Men's Weekly Earnings in $")
Run Code Online (Sandbox Code Playgroud) 我有一个pandas数据框的列,我从带有空白单元格的数据库查询中获得.空白单元格变为"无",我想检查每行是否为None:
In [325]: yes_records_sample['name']
Out[325]:
41055 John J Murphy Professional Building
25260 None
41757 Armand Bayou Nature Center
31397 None
33104 Hubert Humphrey Building
16891 Williams Hall
29618 None
3770 Covenant House
39618 None
1342 Bhathal Student Services Building
20506 None
Run Code Online (Sandbox Code Playgroud)
我对文档的理解是,我可以使用isnull()
命令http://pandas.pydata.org/pandas-docs/dev/missing_data.html#values-considered-missing检查每一行是否为空.
但是,这个功能对我不起作用:
In [332]: isnull(yes_records_sample['name'])
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
NameError Traceback (most recent call last)
<ipython-input-332-55873906e7e6> in <module>()
----> 1 isnull(yes_records_sample['name'])
NameError: name 'isnull' is not defined
Run Code Online (Sandbox Code Playgroud)
我还看到有人刚刚替换了"无"字符串,但这种方法的这些变体都不适用于我: 在Pandas中重命名"无"值
yes_records_sample['name'].replace('None', "--no value--")
yes_records_sample['name'].replace(None, "--no value--")
Run Code Online (Sandbox Code Playgroud)
我最终能够使用该fillna
函数并用空字符串填充每个行 …
我希望首先验证字段的存在,如果字段没有值,则返回一条错误消息.然后假设此存在验证通过,我想运行包含验证.
现在我有:
validates :segment_type, presence: true, inclusion: { in: SEGMENT_TYPES }
Run Code Online (Sandbox Code Playgroud)
我尝试将其拆分为两个单独的验证,如下所示:
validates :segment_type, presence: true
validates :segment_type, inclusion: { in: SEGMENT_TYPES }
Run Code Online (Sandbox Code Playgroud)
但问题是上面的两个尝试,当segment_type
字段中没有包含任何值时,我得到两个响应的错误消息:
Segment type can't be blank
Segment type is not included in the list
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我只想要"段类型不能为空"而不是第二条消息.
有没有什么方法可以告诉rails进行这种条件验证,并给我所需的错误消息瀑布,而不必定义自定义函数,比如segment_type_presence_and_inclusion_check
按顺序检查这些条件并调用它validate :segment_type_presence_and_inclusion_check
?
我已经能够创建一个允许我一次索引多个字符串列的管道,但是我对它们进行了编码,因为与索引不同,编码器不是估算器所以我根本不会根据OneHotEncoder示例调用文档.
import org.apache.spark.ml.feature.{StringIndexer, VectorAssembler,
OneHotEncoder}
import org.apache.spark.ml.Pipeline
val data = sqlContext.read.parquet("s3n://map2-test/forecaster/intermediate_data")
val df = data.select("win","bid_price","domain","size", "form_factor").na.drop()
//indexing columns
val stringColumns = Array("domain","size", "form_factor")
val index_transformers: Array[org.apache.spark.ml.PipelineStage] = stringColumns.map(
cname => new StringIndexer()
.setInputCol(cname)
.setOutputCol(s"${cname}_index")
)
// Add the rest of your pipeline like VectorAssembler and algorithm
val index_pipeline = new Pipeline().setStages(index_transformers)
val index_model = index_pipeline.fit(df)
val df_indexed = index_model.transform(df)
//encoding columns
val indexColumns = df_indexed.columns.filter(x => x contains "index")
val one_hot_encoders: Array[org.apache.spark.ml.PipelineStage] = indexColumns.map(
cname => …
Run Code Online (Sandbox Code Playgroud) 来自R,我习惯于轻松地对列进行操作.有没有什么简单的方法可以使用我在scala中编写的这个函数
def round_tenths_place( un_rounded:Double ) : Double = {
val rounded = BigDecimal(un_rounded).setScale(1, BigDecimal.RoundingMode.HALF_UP).toDouble
return rounded
}
Run Code Online (Sandbox Code Playgroud)
并将其应用于数据框的一列 - 我希望这样做:
bid_results.withColumn("bid_price_bucket", round_tenths_place(bid_results("bid_price")) )
Run Code Online (Sandbox Code Playgroud)
我没有找到任何简单的方法,我正在努力弄清楚如何做到这一点.必须有一种比将数据帧转换为RDD更简单的方法,然后从行的rdd中选择以获得正确的字段并将函数映射到所有值,是吗?还有一些更简洁的创建SQL表然后使用sparkSQL UDF执行此操作?
scala user-defined-functions dataframe apache-spark apache-spark-sql
我试图创建一个列表1000条目长列表中的每个条目一个随机向量.在这种情况下,向量应该是从整数1到100中选择的10个整数.我想避免在循环中执行此操作.
如果我运行以下操作,则不会再次采样,而只是在列表的所有1000个条目中复制样本:
list.of.samples <- rep(list(sample(1:100,size=10)),1000)
Run Code Online (Sandbox Code Playgroud)
我是否有一种简单的方法可以将这1000个样本的生成矢量化并存储在列表中?
有没有办法指定我希望堆积条形图的条形图与ggplot按照从最小到最大的四个因子的总和排序?(所以在下面的代码中,我想按所有变量的总和排序)我有一个数据帧中每个x值的总和,我融化了这个值以创建我构成图形的数据帧.
我用来绘制图表的代码是:
ggplot(md, aes(x=factor(fullname), fill=factor(variable))) + geom_bar()
Run Code Online (Sandbox Code Playgroud)
我当前的图表如下所示:
http://i.minus.com/i5lvxGAH0hZxE.png
最终的结果是我想要一个看起来有点像这样的图:
http://i.minus.com/kXpqozXuV0x6m.jpg
我的数据如下:
图表http://i.minus.com/izAmjF47yfsRQ.png中的数据
我把它融化成这种形式,每个学生都有每个类别的价值:
融化数据http://i.minus.com/i1rf5HSfcpzri.png
在使用以下行进行图表绘制之前
ggplot(data=md, aes(x=fullname, y=value, fill=variable), ordered=TRUE) + geom_bar()+ opts(axis.text.x=theme_text(angle=90))
Run Code Online (Sandbox Code Playgroud)
现在,我不确定我是否了解Chi的排序方式,以及是否可以将其应用于我所拥有的任何一帧的数据.也许在我拥有的原始数据框架中对数据进行排序是有帮助的,这是我首先展示的数据框架.
更新:我们想通了.请参阅此主题以获得答案: 在ggplot中订购堆积条形图
我正在尝试使用R中的sqldf库重写一些代码,这应该允许我在数据帧上运行SQL查询,但是我遇到了一个问题,每当我尝试运行查询时,R似乎试图查询我使用的实际真正的MySQL数据库骗局,并通过我试图搜索的数据框的名称查找表.
当我运行这个:
sqldf("SELECT COUNT(*) from work.class_scores")
Run Code Online (Sandbox Code Playgroud)
我明白了:
mysqlNewConnection(drv,...)出错:RS-DBI驱动程序:(无法连接到数据库:错误:无法通过套接字'/tmp/mysql.sock'连接到本地MySQL服务器(2))
当我尝试使用两种不同的方式指定位置时(第一个形成googlecode页面,第二个应该是基于文档的权利)
> sqldf("SELECT COUNT(*) from work.class_scores", sqldf.driver = "SQLite")
Error in sqldf("SELECT COUNT(*) from work.class_scores", sqldf.driver = "SQLite") :
unused argument(s) (sqldf.driver = "SQLite")
> sqldf("SELECT COUNT(*) from work.class_scores", drv = "SQLite")
Loading required package: tcltk
Loading Tcl/Tk interface ... Error : .onLoad failed in loadNamespace() for 'tcltk', details:
call: dyn.load(file, DLLpath = DLLpath, ...)
error: unable to load shared library '/Library/Frameworks/R.framework/Resources/library/tcltk/libs/x86_64/tcltk.so':
dlopen(/Library/Frameworks/R.framework/Resources/library/tcltk/libs/x86_64/tcltk.so, 10): Library not loaded: /usr/local/lib/libtcl8.5.dylib
Referenced from: /Library/Frameworks/R.framework/Resources/library/tcltk/libs/x86_64/tcltk.so
Reason: …
Run Code Online (Sandbox Code Playgroud) 这可能看起来像一个矛盾,一个"条件默认",但我想知道是否有一种方法,我只能在对象不是某种类型的情况下轻松处理为字段设置默认值.
例如,我有
field :object_type, type: String
field :price, type: Float, default: 0
validates :price, presence: true, numericality: { greater_than_or_equal_to: 0 }
Run Code Online (Sandbox Code Playgroud)
如果我可以添加一个条件unless: ->{ object_type == "a"}
并且照顾这个内联,那将是很好的.rails会允许或者我现在必须使用before_create
回调设置此条件默认值吗?
我希望发生的伪代码:
如果object_type是除"a"之外的任何其他类型,那么我想将price的默认值设置为零.
如果对象类型是a,我只希望零和非负数值可以接受
我正在使用 knitr 生成 PDF 文章。我想打印一系列表格,其间带有节标题。我正在 R 代码块中执行此操作。但不幸的是,发生的情况是第一个标题打印出来,然后是一个数字,然后其余的标题适合该页面,其余的表格在后面,而不是根据需要散布在标题中。
此页之后还有一系列 5 个表格,分别位于各自的页面上。
这是我正在使用的代码:
dfList <- list(alc_top, alc_bottom, cpg_home_top, cpg_home_bottom, electronics_top, electronics_bottom)
labels <- c("Premium Liquor Brand - Top Performers", "Premium Liquor Brand- Bottom Performers", "CPG Home - Top Performers", "CPG Home - Bottom Performers", "Electronics - Top Performers", "CPG Home - Bottom Performers")
for (i in 1:length(dfList)) {
df <- dfList[[i]]
product = "test"
cat(paste("\\section{",labels[i],"}", sep=""))
print(xtable(df,size="\\tiny"))
}
Run Code Online (Sandbox Code Playgroud)
我尝试cat("\\newpage")
在循环内添加新行。这会为每个标签添加一个新页面,但所有图表都再次位于新部分之后。
我认为我需要为表格指定一个定位值(H 或 h 或 LaTex 中类似的值),但我不太确定如何使用 xtable 和 knit 来做到这一点。