对于hive外连接,如果一个表中不存在连接键,hive则将放入NULL.可以使用另一个值吗?例如:
表格1:
user_id, name, age
1 Bob 23
2 Jim 43
Run Code Online (Sandbox Code Playgroud)
表2:
user_id, txn_amt, date
1 20.00 2013-12-10
1 10.00 2014-07-01
Run Code Online (Sandbox Code Playgroud)
如果我做一个LEFT OUTER JOIN上user_id:
INSERT INTO TABLE user_txn
SELECT
Table1.user_id,
Table1.name,
Table2.txn_amt,
Table2.date
FROM
Table2
LEFT OUTER JOIN
Table1
ON
Table1.user_id = Table2.user_id;
Run Code Online (Sandbox Code Playgroud)
我想输出是这样的:
user_id, name, tnx_amt, date
1 Bob 20.00 2013-12-10
1 Bob 10.00 2014-07-01
2 Jim 0.00 2099-12-31
Run Code Online (Sandbox Code Playgroud)
请注意Jim 的txn_amt和date列.有没有办法hive定义这样的默认值?
我使用zsh和emacs键绑定.有时我需要用不同的输入执行相同的命令.输入通常有共同的子串.是否有一种简单的方法可以用其他字符串替换以前命令的部分内容?例如,上一个命令是:
cat chr2.unknow.feature.filtered ../chr2.unknow.feature.filtered ../train/chr2.unknow.withpvalue.feature.filtered > chr2.combined.txt
Run Code Online (Sandbox Code Playgroud)
我怎么能用'chr3'轻松替换'chr2'?
问题的扩展,如何将命令中的几个不同的子串替换为其他不同的字符串:
cat chr1.unknow.feature.filtered ../chr2.unknow.feature.filtered ../train/chr3.unknow.withpvalue.feature.filtered
Run Code Online (Sandbox Code Playgroud)
如何用"chrX"代替"chr1",用"chrZ"替换'chr2','chr3'?
谢谢.
我最近开始使用Eigen库.我有一个将特征矩阵映射到C/C++数组的问题.默认情况下,特征矩阵是专业列.因此,如果我使用以下代码将矩阵映射到C/C++数组,
double a[10];
double *p = &a[0];
MatrixXd(2,5) m;
for (int i=0; i<2;i++)
for (int j=0; j<5;j++)
m(i,j) = i+j;
cout<<m<<endl;
Eigen::Map<MatrixXd>(p,2,5) = m;
for (int i=0; i<10; i++)
cout<<a[i]<<" ";
cout<<endl;
Run Code Online (Sandbox Code Playgroud)
输出是:
0 1 2 3 4
1 2 3 4 5
0 1 1 2 2 3 3 4 4 5
Run Code Online (Sandbox Code Playgroud)
如果我将m的定义更改为行主要:
Matrix <double,2,5,RowMajor> m;
Run Code Online (Sandbox Code Playgroud)
我希望输出看起来像这样:
0 1 2 3 4
1 2 3 4 5
0 1 2 3 4 1 2 3 4 5 …Run Code Online (Sandbox Code Playgroud) 我有以下数据帧data:
root
|-- userId: string
|-- product: string
|-- rating: double
Run Code Online (Sandbox Code Playgroud)
以及以下查询:
val result = sqlContext.sql("select userId, collect_list(product), collect_list(rating) from data group by userId")
Run Code Online (Sandbox Code Playgroud)
我的问题是,不product和rating在聚集阵列相互匹配?也就是说,同一行product和rating来自同一行的聚合数组中是否具有相同的索引.
更新:从Spark 2.0.0开始,可以collect_list对struct类型执行,因此我们可以collect_list在组合列上执行一个.但是对于2.0.0之前的版本,人们只能使用collect_list原始类型.
我正在使用MLlib的矩阵分解来向用户推荐项目.我有一个很大的隐式交互矩阵,M = 2000万用户和N = 50k项目.在训练模型之后,我想获得每个用户的推荐列表(例如200).我尝试过recommendProductsForUsers,MatrixFactorizationModel但它非常慢(跑了9个小时,但距离完成还很远.我正在测试50个执行器,每个都有8g内存).这可能是预期的,因为recommendProductsForUsers需要计算所有M*N用户项目交互并获得每个用户的顶部.
我会尝试使用更多的执行程序,但是从我在Spark UI上的应用程序细节中看到的,我怀疑它可以在几小时或一天完成,即使我有1000个执行程序(9小时之后它仍然在flatmap这里https:// github. com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/mllib/recommendation/MatrixFactorizationModel.scala#L279-L289,10000个总任务,只有~200个完成)还有其他的东西吗除了增加执行者数量之外,我可以调整以加快推荐过程吗?
这是示例代码:
val data = input.map(r => Rating(r.getString(0).toInt, r.getString(1).toInt, r.getLong(2))).cache
val rank = 20
val alpha = 40
val maxIter = 10
val lambda = 0.05
val checkpointIterval = 5
val als = new ALS()
.setImplicitPrefs(true)
.setCheckpointInterval(checkpointIterval)
.setRank(rank)
.setAlpha(alpha)
.setIterations(maxIter)
.setLambda(lambda)
val model = als.run(ratings)
val recommendations = model.recommendProductsForUsers(200)
recommendations.saveAsTextFile(outdir)
Run Code Online (Sandbox Code Playgroud) scala collaborative-filtering apache-spark apache-spark-mllib
我需要join基于一些共享键列来组合许多DataFrame.对于键值RDD,可以指定分区器,以便将具有相同键的数据点混洗到同一个执行器,因此加入更有效(如果在之前有一个shuffle相关操作join).可以在Spark DataFrames或DataSet上完成同样的事情吗?
partitioning apache-spark apache-spark-sql spark-dataframe apache-spark-dataset
我有一个包含两列的数据帧(一个字符串和一个字符串数组):
root
|-- user: string (nullable = true)
|-- users: array (nullable = true)
| |-- element: string (containsNull = true)
Run Code Online (Sandbox Code Playgroud)
如何才能筛选数据框,这样的结果数据框只包含行认为user是users?
apache-spark ×4
scala ×3
hive ×2
arrays ×1
c++ ×1
command-line ×1
dataframe ×1
eigen ×1
hadoop ×1
join ×1
linux ×1
matrix ×1
partitioning ×1
zsh ×1