小编Ken*_*nny的帖子

df.SaveAsTable 和 spark.sql(Create table..) 的区别

参考这里关于saveastable和insertInto的区别

以下两种方法有什么区别:

df.saveAsTable("mytable");
Run Code Online (Sandbox Code Playgroud)

df.createOrReplaceTempView("my_temp_table");
spark.sql("drop table if exists " + my_temp_table);
spark.sql("create table mytable as select * from 
my_temp_table");
Run Code Online (Sandbox Code Playgroud)

在哪种情况下表存储在内存中,在哪种情况下物理存储在磁盘上?

另外,根据我的理解,createOrReplaceTempView只注册可通过 Hive 查询访问的数据帧(已在内存中),而不实际保留它,是否正确?

我必须加入数百个表并遇到 OutOfMemory 问题。在效率方面,最好的方法是什么?

  • df.persist() 和 df.join(..).join(..).join(..).. #hundred joins

  • createOrReplaceTempView然后加入spark.sql()

  • SaveAsTable (?不确定下一步)

  • 写入磁盘Create Table然后加入spark.sql()?

hive scala apache-spark apache-spark-sql pyspark

6
推荐指数
1
解决办法
5563
查看次数

Excel范围C#中的非空单元格

我想从当前单元格到行的最后一个单元格中选择所有非空单元格.

如果我们使用

currentRange.End[XlDirection.xlToRight]
Run Code Online (Sandbox Code Playgroud)

当非空单元格不是连续的链接时,这不是一个好方法.例如,单元格A1,A2,A3,A5,A6不为空,然后RangeA1.End[XlDirection.xlToRight]只到A3,即连接到RangeA1的最后一个非空单元格.

另外一个选项:

CreateRange(currentRange, lastRangePossibleinRow).SpecialCells(...)
Run Code Online (Sandbox Code Playgroud)

我有3个问题:

  1. currentRange.End[XlDirection.xlToRight]似乎是一个不可靠的解决方案.例如,如果currentRange为空,则无论如何都会返回1个单元格(本身).

  2. 如何有效地将选择从当前单元格扩展到Row中的最后一个单元格?CreateRange(currentRange, get_range(currentRange.Row + sheet.Columns.Count.ToString()))?也许有更好的解决方案.

  3. 如何获取此范围中非空的单元格集合?.SpecialCells(xlCellTypeConstants | xlCellTypeFormulas) 将无法工作,例如,如果找到non,.SpecialCells(xlCellTypeConstants)将抛出异常:找不到单元格.

c# excel range

5
推荐指数
1
解决办法
1220
查看次数

正则表达式中的运算符优先级

当Oracle正则表达式不包含括号时,默认运算符优先级是多少?

例如,给定

 H|ha+
Run Code Online (Sandbox Code Playgroud)

将其评价为H|h,然后再连接到a作为((H|h)a),或将在H与交替ha(H|(ha))

此外,什么时候+开始等等?

regex oracle operator-precedence oracle11g

5
推荐指数
2
解决办法
1万
查看次数

使用 loc 删除索引过滤数据帧

考虑数据框

df = pd.DataFrame(numpy.random.randint(0,10,size=(5, 4)), columns=list('ABCD'))
df
   A  B  C  D
0  5  8  0  4
1  7  4  9  0
2  8  1  1  8
3  2  7  6  6
4  4  3  3  0
Run Code Online (Sandbox Code Playgroud)

我想过滤loc(结果将是单行)然后从某个单元格中提取一些数据

df.loc[df.A == 7].B
1    4
df.loc[df.A == 7].B.to_string()
'1    4'
Run Code Online (Sandbox Code Playgroud)

问题是索引总是进入路径。我如何摆脱它和/或仅提取细胞。此示例处理数字,但我确实有包含其他类型数据的列。任何想法 ?

python type-conversion dataframe pandas pandas-loc

5
推荐指数
1
解决办法
8029
查看次数

Python编写switch case的有效方法比较

我通常使用字典实现 Switch/Case 进行相等比较。

dict = {0:'zero', 1:'one', 2:'two'}; 
a=1; res = dict[a]
Run Code Online (Sandbox Code Playgroud)

代替

if a==0 :
  res = 'zero'
elif a == 1:
  res = 'one'
elif a==2:
  res = 'two'
Run Code Online (Sandbox Code Playgroud)

是否有策略来实施类似的非等比较方法?

if score <=10 :
  cat = 'A'
elif score >10 and score <=30:
  cat = 'B'
elif score >30 and score <=50 :
  cat = 'C'
elif score >50 and score <=90 :
  cat = 'D'
else:
  cat = 'E'
Run Code Online (Sandbox Code Playgroud)

我知道使用 <、<=、>、>= 可能很棘手,但是是否有任何策略可以概括它或从列表中生成自动语句

{[10]:'A', [10,30]:'B', [30,50]:'C',[50,90]:'D',[90]:'E'}
Run Code Online (Sandbox Code Playgroud)

还有一些标志来说明它是 < …

python switch-statement

5
推荐指数
3
解决办法
2万
查看次数

整个数据框上的 Pyspark 窗口函数

考虑一个 pyspark 数据框。我想总结整个数据框,每列,并为每一行附加结果。

+-----+----------+-----------+
|index|      col1| col2      |
+-----+----------+-----------+
|  0.0|0.58734024|0.085703015|
|  1.0|0.67304325| 0.17850411|
Run Code Online (Sandbox Code Playgroud)

预期结果

+-----+----------+-----------+-----------+-----------+-----------+-----------+
|index|      col1| col2      |  col1_min | col1_mean |col2_min   | col2_mean
+-----+----------+-----------+-----------+-----------+-----------+-----------+
|  0.0|0.58734024|0.085703015|  -5       | 2.3       |  -2       | 1.4 |
|  1.0|0.67304325| 0.17850411|  -5       | 2.3       |  -2       | 1.4 |
Run Code Online (Sandbox Code Playgroud)

据我所知,我需要将整个数据框作为 Window 的 Window 函数,以保留每一行的结果(而不是,例如,分别进行统计,然后再加入以复制每一行)

我的问题是:

  1. 如何在没有任何分区或 order by 的情况下编写 Window

我知道有带有分区和顺序的标准窗口,但不是将所有内容都作为 1 个单独分区的窗口

w = Window.partitionBy("col1", "col2").orderBy(desc("col1"))
df = df.withColumn("col1_mean", mean("col1").over(w)))
Run Code Online (Sandbox Code Playgroud)

我将如何编写一个将所有内容作为一个分区的窗口?

  1. 为所有列动态写入的任何方式。

假设我有 500 列,重复写入看起来不太好。

df = df.withColumn("col1_mean", mean("col1").over(w))).withColumn("col1_min", min("col2").over(w)).withColumn("col2_mean", …
Run Code Online (Sandbox Code Playgroud)

dataframe window-functions apache-spark apache-spark-sql pyspark

5
推荐指数
1
解决办法
2564
查看次数

使用子查询选择INTO

关于SQL Server中的SELECT INTO

以下抛出错误 Incorrect syntax near ')'.

SELECT * INTO Sales.MyTable FROM 
(SELECT TOP(100) * FROM Sales.Customer)
Run Code Online (Sandbox Code Playgroud)

以下内容将通过

With tempCust AS
(
SELECT TOP(100) * FROM Sales.Customer
)
SELECT * INTO Sales.MyTable FROM tempCust
Run Code Online (Sandbox Code Playgroud)

那背后的规则是什么?

sql-server subquery select-into common-table-expression

4
推荐指数
1
解决办法
3939
查看次数

在同义词和基础表上访问权限

1 /同义词和底层对象的权限如何相关?如果一个人拥有同义词的权利,他会自动拥有该表的权利,反之亦然吗?

甲骨文

当您在同义词上授予对象权限时,您实际上是在对基础对象授予权限,并且同义词仅作为GRANT语句中对象的别名

这意味着同义词的特权就足够了.这将绕过表权限.

另一个消息来源说,桌面上的访问权限已足够,同义词权限没有任何意义.

这是表示同义词或基础表上的权限是否足够?

2 /私有和公共同义词的行为是否相同.我还没有真正看到为用户授予"查看/访问"同义词权限的示例.如何向用户授予私有同义词的权限?

oracle privileges synonym oracle10g oracle11g

4
推荐指数
1
解决办法
3万
查看次数

将DataFrame show()的结果保存到pyspark中的字符串

我想在pyspark中捕获show的结果,类似于此处此处。我无法使用pyspark找到解决方案,只能使用scala。

df.show()
#+----+-------+
#| age|   name|
#+----+-------+
#|null|Michael|
#|  30|   Andy|
#|  19| Justin|
#+----+-------+
Run Code Online (Sandbox Code Playgroud)

最终目的是将其捕获为logger.info 我尝试过的字符串logger.info(df.show()),仅在控制台上显示。

python apache-spark apache-spark-sql pyspark

4
推荐指数
1
解决办法
956
查看次数

复合字符串格式的String.Format变量

我想在String.Format中将变量放入复合格式.含义

String str = String.Format("{0:[what should I put here]}", mydate, myFormat};
Run Code Online (Sandbox Code Playgroud)

所以结果将取决于myFormat.

myFormat = "yyyy" => str = "2015"
myFormat = "hh:mm:ss" => str = "08:20:20"
Run Code Online (Sandbox Code Playgroud)

我没有成功

String.Format("{0:{1}}", mydate, myFormat}
Run Code Online (Sandbox Code Playgroud)

也不

String.Format("{0:{{1}}}", mydate, myFormat}
Run Code Online (Sandbox Code Playgroud)

也不

String.Format("{0:\{1\}}", mydate, myFormat}
Run Code Online (Sandbox Code Playgroud)

感谢大家.

c# string string.format datetime composite

3
推荐指数
1
解决办法
355
查看次数

Object_ID中不同类型的函数

在创建函数时,我倾向于在创建前加上存在性检查

IF Object_ID(N'myfunc', N'IF') IS NOT NULL 
DROP FUNCTION myfunc

GO
CREATE FUNCTION myfunc...
Run Code Online (Sandbox Code Playgroud)

有几种类型的object_id要检查函数:

FN = SQL scalar function
IF = SQL inline table-valued function
TF = SQL table-valued-function
FT = Assembly (CLR) table-valued function
Run Code Online (Sandbox Code Playgroud)

我有一些问题 :

  1. 'IF','TF''FT' 类型有什么区别?

  2. 它非常容易出错

    IF Object_ID(N'myFunc', 'IF') IS NOT NULL
    
    Run Code Online (Sandbox Code Playgroud)

    因为某个时候函数是标量,其他情况下它是表值等,所以我可能会错过正确的类型检查.

我看到人们推荐

IF EXISTS (SELECT * FROM sys.objects 
WHERE object_id = OBJECT_ID(N'myfunc') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
Run Code Online (Sandbox Code Playgroud)

检查所有类型的功能是否足够?你有什么建议?

sql-server function objectid

3
推荐指数
1
解决办法
2455
查看次数

ORDER BY子查询和ROWNUM违背了关系哲学?

Oracle ROWNUM之前已经应用过了ORDER BY.为了ROWNUM根据排序列放置,在所有文档和文本中提出以下子查询.

select *
from (
  select *
  from table
  order by price
)
where rownum <= 7
Run Code Online (Sandbox Code Playgroud)

这让我很烦恼.据我所知,表输入FROM是关系的,因此没有存储顺序,这意味着子查询中的顺序在被看到时不被尊重FROM.

我不记得确切的情况,但这个" ORDER BY在外部查询中没有任何影响"的事实我不止一次阅读过.示例是内联子查询INSERT,ORDER BYPARTITION子句的子查询等.例如

OVER (PARTITION BY name ORDER BY salary)

外部查询中不会遵守工资订单,如果我们希望在外部查询输出中对工资进行排序,则ORDER BY需要在外部查询中添加另一个工资.

每个人都有一些关于为什么关系属性在这里不受尊重和订单的见解存储在子查询中?

oracle sql-order-by relational-database oracle11g rownum

1
推荐指数
2
解决办法
2306
查看次数

通过创建视图来绕过表权限和WITH GRANT OPTION

在Oracle中,用户只需要视图上的权限就可以从中进行SELECT,更准确地说,是视图从表中看到的内容.桌面上的权限不是必需的.

让我们考虑一下这种情况:

Table T belongs to A
A GRANT SELECT ON T to B (without GRANT OPTION)
B CREATE VIEW V AS SELECT * FROM A.T
B GRANT SELECT ON V TO C
C performing SELECT * FROM B.V
Run Code Online (Sandbox Code Playgroud)

根据上面的规则,C将能够从V中进行选择,因此相当于从T中选择.这种作弊行为是什么?B有效地让C看到AT虽然C在T上没有权利而B没有GRANT OPTION.某处有安全漏洞吗?

oracle privileges view grant oracle11g

0
推荐指数
1
解决办法
3909
查看次数