参考这里关于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()?
我想从当前单元格到行的最后一个单元格中选择所有非空单元格.
如果我们使用
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个问题:
currentRange.End[XlDirection.xlToRight]似乎是一个不可靠的解决方案.例如,如果currentRange为空,则无论如何都会返回1个单元格(本身).
如何有效地将选择从当前单元格扩展到Row中的最后一个单元格?CreateRange(currentRange, get_range(currentRange.Row + sheet.Columns.Count.ToString()))?也许有更好的解决方案.
如何获取此范围中非空的单元格集合?.SpecialCells(xlCellTypeConstants | xlCellTypeFormulas) 将无法工作,例如,如果找到non,.SpecialCells(xlCellTypeConstants)将抛出异常:找不到单元格.
当Oracle正则表达式不包含括号时,默认运算符优先级是多少?
例如,给定
H|ha+
Run Code Online (Sandbox Code Playgroud)
将其评价为H|h,然后再连接到a作为((H|h)a),或将在H与交替ha在(H|(ha))?
此外,什么时候+开始等等?
考虑数据框
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)
问题是索引总是进入路径。我如何摆脱它和/或仅提取细胞。此示例处理数字,但我确实有包含其他类型数据的列。任何想法 ?
我通常使用字典实现 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)
还有一些标志来说明它是 < …
考虑一个 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 个单独分区的窗口
w = Window.partitionBy("col1", "col2").orderBy(desc("col1"))
df = df.withColumn("col1_mean", mean("col1").over(w)))
Run Code Online (Sandbox Code Playgroud)
我将如何编写一个将所有内容作为一个分区的窗口?
假设我有 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
关于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)
那背后的规则是什么?
我想在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()),仅在控制台上显示。
我想在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)
感谢大家.
在创建函数时,我倾向于在创建前加上存在性检查
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)
我有一些问题 :
'IF','TF'和'FT' 类型有什么区别?
它非常容易出错
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)
检查所有类型的功能是否足够?你有什么建议?
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中,用户只需要视图上的权限就可以从中进行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 ×4
oracle11g ×4
apache-spark ×3
pyspark ×3
python ×3
c# ×2
dataframe ×2
privileges ×2
sql-server ×2
composite ×1
datetime ×1
excel ×1
function ×1
grant ×1
hive ×1
objectid ×1
oracle10g ×1
pandas ×1
pandas-loc ×1
range ×1
regex ×1
rownum ×1
scala ×1
select-into ×1
sql-order-by ×1
string ×1
subquery ×1
synonym ×1
view ×1