我刚开始使用 Spark-SQL 从 H2 数据库加载数据,这是我按照 Spark-SQL 文档所做的:
>>> sqlContext = SQLContext(sc)
>>> df = sqlContext.load(source="jdbc",driver="org.h2.Driver", url="jdbc:h2:~/test", dbtable="RAWVECTOR")
Run Code Online (Sandbox Code Playgroud)
但它不起作用并出现错误,我认为问题在于函数中未指定用户名和密码。
这是来自 Spark-SQL 1.3.1 文档的参数:
url
要连接到的 JDBC URL。
dbtable
应该读取的 JDBC 表。请注意,FROM
可以使用在 SQL 查询子句中有效的任何内容。例如,您还可以使用括号中的子查询来代替完整的表。
driver
连接到此 URL 所需的 JDBC 驱动程序的类名。此类在运行 JDBC 命令之前加载到 master 和 worker 上,以允许驱动程序向 JDBC 子系统注册自己。
partitionColumn
, lowerBound
, upperBound
,numPartitions
如果指定了其中任何选项,则必须全部指定这些选项。他们描述了从多个工作人员并行读取时如何对表进行分区。partitionColumn 必须是相关表中的数字列。
但是我没有找到任何线索如何将数据库用户名和密码传递给 sqlContext.load 函数。有谁有类似的案例或线索吗?
谢谢。
.env
、.env.default
和加载变量.env.{environment}
,其中由命令中的environment
标志提供。--env
fastlane
Fastfile
环境文件。.env.{environment}
时,我想保留加载文件的行为。{environment}
--env
我尝试重写以下代码以使用字典理解,只是为了好玩:
import itertools
with open('foo.txt') as f:
entities = f.read().splitlines()
parsed_entities = []
while entities:
props = itertools.takewhile(lambda n: n != 'EOM', entities)
entity = {p.split('=')[0]: p.split('=')[1] for p in props}
entities = entities[len(entity)+2:] # Delete and skip EOM & newline
parsed_entities.append(entity)
Run Code Online (Sandbox Code Playgroud)
我想替换这一行:
entity = {p.split('=')[0]: p.split('=')[1] for p in props}
Run Code Online (Sandbox Code Playgroud)
具有更好看的字典理解,可能看起来像:
entity = {key: value for p in props for key, value in p.split('=')}
Run Code Online (Sandbox Code Playgroud)
当我尝试这样做时,我收到以下错误:
ValueError:解压缩的值太多(预期2)
我究竟做错了什么?使用ipdb.pm()
我看到p是name=yam
,这是很好的,但key
并value
没有定义.
当查看CPython时tokenizer.c
,令牌生成器返回特定的错误消息。
例如,您可以看一下分词器尝试解析十进制数的部分。尝试解析该数字时,5_6
一切都应该正常,但是当尝试解析该数字时5__6
,令牌生成器应返回SyntaxError并显示消息“无效的十进制文字”:
static int
tok_decimal_tail(struct tok_state *tok)
{
int c;
while (1) {
do {
c = tok_nextc(tok);
} while (isdigit(c));
if (c != '_') {
break;
}
c = tok_nextc(tok);
if (!isdigit(c)) {
tok_backup(tok, c);
syntaxerror(tok, "invalid decimal literal");
return 0;
}
}
return c;
}
Run Code Online (Sandbox Code Playgroud)
使用Python,我尝试达到令牌生成器的SyntaxError
消息:
In [12]: try:
...: eval('5__6')
...: except SyntaxError as e:
...: print(e.args, e.filename, e.lineno, e.msg, e.text)
('invalid token', ('<string>', 1, 2, '5__6')) …
Run Code Online (Sandbox Code Playgroud) 我有以下辅助函数用于使用以下方法解析参数argparse
:
def get_cli_arguments():
parser = argparse.ArgumentParser(prog='Xtrayce')
parser.add_argument(
"-o", "--output",
default=get_default_output_path(),
help="Supply an output path.",
type=argparse.FileType('wb'),
)
parser.add_argument(
"-d", "--dry",
help="Don't save a file with the output.",
action="store_true",
)
parser.add_argument(
"-s", "--standard",
help="Also scan standard library and modules.",
action="store_true",
)
Run Code Online (Sandbox Code Playgroud)
我希望每当用户指定该--dry
标志时,就不会从该参数创建任何文件--output
。
当用户指定--dry
,同时仍然使用default=
和时,“取消”文件创建的最佳方法是什么type=argparse.FileType("wb")
?
我有一个大型代码库,其中包含数千个功能。
我想在每个函数调用之前和之后,函数启动时和结束时启用代码执行。
有没有一种方法无需重新编译Python或向每个函数添加代码?有没有办法钩住代码中的每个函数调用?
python ×4
python-3.x ×3
apache-spark ×1
argparse ×1
cpython ×1
dictionary ×1
fastlane ×1
h2 ×1
hook ×1
ios ×1
jdbc ×1