Spark SQL: 列值只能是 A、T、G、C 或 N 的组合
Spark SQL: column values can only be a combination of A,T,G,C or N
我正在尝试查询 spark table 以查找 'ref' 列中包含非 A、T、G、C 或 N 的字母的所有行。
有效结果应仅包含这些字母,并且可以包含任何长度或这些字母的组合。
例如:
有效 = AA、ATTTGGGGCCCC、C、G、TTG、N 等
无效 = P, ., NULL
以下查询仅返回单核苷酸列:
SELECT ref
from test_set
where ref not in ('*A*', '*T*', '*G*', '*C*', '*N*')
ref
1 T
2 C
3 T
4 C
5 T
以下查询在 impala sql 中有效,但在 spark 中无效,而且也很丑陋:
SELECT regexp_replace(regexp_replace(regexp_replace(regexp_replace(regexp_replace(ref, 'A', ''), 'T', ''), 'G', ''), 'C', ''), 'N', '')
from spark_df
如果您不想使用 regexp_extract,可以通过执行以下操作获得相同的结果:
SELECT ref
from test_set
where not (
ref like '*A*' or
ref like '*T*' or
ref like '*C*' or
ref like '*G*' or
ref like '*N*'
)
好的..我想通了:
SELECT regexp_extract(ref, 'ATGCN', 0)
from test_set
或者
SELECT alt
FROM test_set
WHERE regexp_extract( alt, '([^ACGTN.])', 0 ) IS NULL
我正在尝试查询 spark table 以查找 'ref' 列中包含非 A、T、G、C 或 N 的字母的所有行。
有效结果应仅包含这些字母,并且可以包含任何长度或这些字母的组合。
例如:
有效 = AA、ATTTGGGGCCCC、C、G、TTG、N 等
无效 = P, ., NULL
以下查询仅返回单核苷酸列:
SELECT ref
from test_set
where ref not in ('*A*', '*T*', '*G*', '*C*', '*N*')
ref
1 T
2 C
3 T
4 C
5 T
以下查询在 impala sql 中有效,但在 spark 中无效,而且也很丑陋:
SELECT regexp_replace(regexp_replace(regexp_replace(regexp_replace(regexp_replace(ref, 'A', ''), 'T', ''), 'G', ''), 'C', ''), 'N', '')
from spark_df
如果您不想使用 regexp_extract,可以通过执行以下操作获得相同的结果:
SELECT ref
from test_set
where not (
ref like '*A*' or
ref like '*T*' or
ref like '*C*' or
ref like '*G*' or
ref like '*N*'
)
好的..我想通了:
SELECT regexp_extract(ref, 'ATGCN', 0)
from test_set
或者
SELECT alt
FROM test_set
WHERE regexp_extract( alt, '([^ACGTN.])', 0 ) IS NULL