我已经在我的机器上安装了Anaconda(python 2.7版),并用“PYSPARK\u DRIVER\u python=jupyter”和“PYSPARK\u DRIVER\u python\u OPTS=“notebook”启动了jupyter笔记本,我正在连接到jupyter笔记本,但也无法运行“print”命令。当我运行命令时,它将进入下一行,但不显示输出,并且打印不会以彩色突出显示
我已经在我的windows机器(独立模式)中安装了pyspark并在命令提示符下运行,它工作正常……
我想根据键找到多少不同的值,例如,假设我有
x = sc.parallelize([("a", 1), ("b", 1), ("a", 1), ("b", 2), ("a", 2)])
我已经完成了groupByKey的使用
sorted(x.groupByKey().map(lambda x : (x[0], list(x[1]))).collect())
x.groupByKey().mapValues(len).collect()
输出将由like
[('a', [1, 1, 2])
我如何解决这个问题
rdd.collect() //['3e866d48b59e8ac8aece79597df9fb4c'...]
rdd.toDF() //Can not infer schema for type: <type 'str'>
myschema=StructType([StructField("col1", StringType(),True)])
rdd.toDF(myschema).show()
rdd.collect()/['3e866d48b5
我想使用一个键将多个RDD合并成一个RDD。有没有一种有效的方法来代替多次加入
例如:
Rdd_1 = [(0, a), (1, b), (2, c), (3, d)]
Rdd_2 = [(0, aa), (1, bb), (2, cc), (3, dd)]
Rdd_3 = [(0, aaa), (1, bbb), (2, ccc), (3, ddd)]
我认为输出应该是这样的
Rdd = [(0, a, aa, aaa), (1, b, bb, bbb), (2, c, cc, ccc),
给定以下数据帧:
import findspark
findspark.init()
from pyspark.sql import SparkSession
spark = SparkSession.builder.master("local").appName("test").getOrCreate()
df = spark.createDataFrame([['a',1],['b', 2],['a', 3]], ['category', 'value'])
df.show()
+--
在pyspark 2.0中按箭头键时,我得到字符。
我在Cent OS上的虚拟机上安装了spark 1.6和spark 2.0。spark 1.6没有问题
由于我在pyspark 2.0中使用Python2.7,“pip2.7安装readline”不起作用。
我试过了
但这并不能解决问题。这些是ANSI转义序列。^[代表转义字符(ASCII 27),下面包括序列的类型和参数。请阅读更多有关它们的信息。head-2/path/to/SPARK version-*/bin/pyspark的输出是什么
我使用pysparksql将两个表连接在一起,一个包含带有经度和纬度的犯罪地点数据,另一个包含带有相应经度和纬度的邮政编码
我想弄清楚的是如何统计每个邮政编码内发生的犯罪数量。我是PySpark的新手,我的SQL已经生锈了,所以我不确定自己哪里出了问题
我曾尝试使用COUNTDISTINCT,但这只是给出了不同邮政编码的总数
mySchema = StructType([StructField("Longitude", StringType(),True), StructField("Latit
标签: Pyspark
pyspark-sqlpyspark-dataframes
如何在pyspark中将全名拆分为不同的列
输入CSV:
Name,Marks
Sam Kumar Timberlake,83
Theo Kumar Biber,82
Tom Kumar Perry,86
Xavier Kumar Cruse,87
FirstName,MiddleName,LastName,Marks
Sam,Kumar,Timberlake,83
Theo,Kumar,Biber,82
Tom,Kumar,Perry,86
Xavier,Kumar,Cruse,87
输出
我有一个Pyspark数据框,其中包含一些非唯一的键键,以及一些列数字和值
对于大多数键,数字列从1到12,但对于其中一些键,数字(例如,我们有数字[1,2,5,9])。我想添加缺少的行,这样对于每个键,我们就可以用最后看到的值填充1-12范围内的所有数字
所以这张桌子
key number value
a 1 6
a 2 10
a 5 20
a 9 25
我想去
key
我需要从数据帧中“克隆”或“复制”/“复制”每一行
我什么也没发现,我只知道我需要使用explode
例如:
ID - Name
1 John
2 Maria
3 Charles
输出:
ID - Name
1 John
1 John
2 Maria
2 Maria
3 Charles
3 Charles
谢谢您可以使用数组重复和分解(Spark2.4+)
对于重复的:
from pyspark.sql import f
我有以下rdd
[('K', ' M'),
('K', ' H'),
('M', ' K'),
('M', ' E'),
('H', ' F'),
('B', ' T'),
('B', ' H'),
('E', ' K'),
('E', ' H'),
('F', ' K'),
('F', ' H'),
('F', ' E'),
('A', ' Z')]
我想过滤掉rdd中存在(y,x)的元素(x,y)。在我的示例中,输出应该如下所示:
[(K,M),
(H,F)]
我试图在HDP2.6.3沙盒上构建一个数据管道。(docker)我正在使用pyspark和phoenix(4.7)以及HBase
我已经从maven安装了phoenix项目,并成功地创建了一个包含测试记录的表。我也可以在Hbase中看到数据
现在,我尝试使用pyspark从表中读取数据,代码如下:
import phoenix
from pyspark import SparkContext
from pyspark.sql import SQLContext
sc = SparkContex
我正在尝试按照我已经阅读过的一些说明安装graphframes包
我的第一次尝试是在命令行中执行此操作:
pyspark--packages graphframes:graphframes:0.5.0-spark2.1-s_2.11
这是完美的工作和下载成功地完成了在机器上
但是,当我尝试在Jupyter笔记本中导入包时,它会显示错误:
can't find module 'graphframes'
我的第一次尝试是将包文件夹/graphframes复制到/site包,但我无法使用简单的c
我试图在PySpark中转换下面的SQL查询,但不知何故,它不起作用
选择
明显的*
从数据集
左图('123','203')中的(帕特,3)
在获取PAT列的子字符串后,可以使用isin运算符:
df_data = spark.createDataFrame([['123221'], ['2321'], ['123221'], ['20322']], ['PAT'])
df_data.show()
+------+
| PAT|
+------+
|123221|
| 2321|
|1
我的dataframe有3列,在这三列中,有可能在第3列中有null。该DF中的总记录为200万条。
我需要通过mysql数据库中的一个值来填充这个空值(基本上是调用一个返回值的函数)。我可以考虑在每一行上循环,但考虑到数据量,这可能会耗费更多的时间。
我知道如何用静态值填充空值,但这是完全动态的。
谢谢你的帮助
当做
Robin如果我没有弄错您的问题,那么如果以前有Null值,您希望在列中有一些唯一的值。一种可能的方法是使用以下代码,它检查value列中的Null值。如果它发现Null,它将使
我有一些数据看起来像这样
time
08:28:24
22:20:54
12:59:38
21:46:07
我想选择介于16:00:00和23:59:59之间的时间,这是一个闭合范围
我该拿它怎么办?”“时间”列类型为字符串
谢谢大家! 转换列时,可以使用列函数。请参见下面带有注释的示例:
import datetime
from pyspark.sql import functions as F
from pyspark.sql import types as T
#pyspark do
标签: Pyspark
spark-streamingspark-structured-streamingspark-streaming-kafka
我正在spark结构化流数据帧上进行一些转换。我将转换后的数据帧存储为hdfs中的拼花文件。现在我希望对hdfs的写入应该成批进行,而不是先转换整个数据帧,然后存储数据帧 下面是一个拼花地板水槽示例:
# parquet sink example
targetParquetHDFS = sourceTopicKAFKA
.writeStream
.format("parquet") # can be "orc", "json", "csv", etc.
.outputMo
我的pyspark数据框是“值”:
我想使用pyspark循环到df的每个值
我的代码:
out = []
for i in values.collect():
print(i)
我基本上想做的是(for(i in 1:nrow(values))
我正在pyspark中尝试下面的代码,但结果如下
Row(w_vote=0.1)
Row(w_vote=0.2)
Row(w_vote=0.25)
Row(w_vote=0.3)
Row(w_vote=0.31)
Row(w_vote=0.3
我处理临床数据,所以很抱歉我不能显示任何输出,因为它是HIPAA规定的,但我会尽我所能填补任何空白
我刚毕业于数据科学专业,从来没有花太多时间研究过spark系统,但我现在担任新的角色。我们正在从一个我将调用udf_函数的函数中收集输出,该函数从医生那里获取临床记录(报告),并返回函数从python函数调用_函数中定义的输出。下面是我用来完成这项任务的代码
def call_function(report):
//python code that generates a list of
标签: Pyspark
apache-spark-sqlpyspark-sqlaws-gluepyspark-dataframes
我有一本csv规则手册,数据如下:
operator|lastname|operator|firstname|val
equals | ABC |contains| XYZ | 2
equals | QWE |contains| rty | 3
因此,如果lastname等于ABC,并且firstname类似于XYZ,那么val将是2,就像那样。此文件可以更改或修改,因此条件将是动态的。将来甚至可以添加行
现在,我的pyspark数据帧是:
lastna
我编写了一个函数,将数据帧的数据类型转换为Pyspark中指定的模式。如果无法转换为相应的数据类型,则Cast函数会以静默方式将条目设为Null
e、 g.F.col(col\u name).cast(IntegerType())将类型转换为整数,如果列值很长,则将其设置为null
有没有办法捕获它转换为Null的情况?在每天运行的数据管道中,如果未捕获到这些数据,它将静默地使它们为Null并传递给上游系统。在执行cast步骤后,如何执行isNull()操作?如果UDF无法转换数据类型,则可能需
我是pyspark的新手。我想应用StringIndexer将列的值更改为index。
我查看了这篇帖子:
此解决方案将创建一个新列,而不是更新输入列。有没有办法更新current列?我尝试使用相同的名称进行输入和输出,但不起作用
label_stringIdx = StringIndexer(inputCol ="WindGustDir", outputCol = "WindGustDir_index")
您不能简单地更新该列。但你能做的是
使用StringIndexer创建新列
删除原
我有一个如下所示的数据帧,并尝试使用df.fillna(0)或df.fillna(“nn”)替换null,这两种方法似乎对数据帧没有影响。如有任何建议,将不胜感激。
id |值
+-----------+------------+
1 |[“a”、“b”、“c”]
6 | null您确定已将新数据帧分配给旧数据帧吗?因为它不在原地做。
您应该这样做:
df = df.fillna(0)
df = df.fillna("nn")
您确定已将新数据帧指定给旧数据帧吗?因为它不在原地做。
您应该这
我目前正在尝试使用numpy内置函数np.sign将所有行值转换为特定符号
我的代码:
import numpy as np
pd_dataframe = pd.DataFrame({'id': [i for i in range(10)],
'values': [10,5,3,-1,0,-10,-4,10,0,10]})
sp_dataframe = spark.createDataFrame(pd_dataframe)
sign_a
我有一个用ctrl分隔的文件,其标题如下:
文件名“,”文件元数据“,”数据内容“,”状态“,”错误类型“,”错误消息“
我需要将文件的每个记录的各个文件转储到hdfs中,并将其转储到诸如-basepath\u errortype\u filename/file.json这样的目录中,文件的内容将是data\u content列
显示示例数据:
>>> ff_df = ff_rdd.toDF(['file_name','file_metadata','data_content'
我有一个如下所示的数据框
如果用户提供了一个值,我想计算元组中第二个数字的平均值,这些数字来自该特定值上方的所有行
示例:假设该值为10。我想获取“value”列中的值大于或等于10的所有行,并计算这些行的平均值。在本例中,它将占据前两行,输出如下所示
有人能帮我吗?另一个选项:你可以先过滤数据帧,然后计算平均值;使用getItem方法访问结构列中的value1字段:
import pyspark.sql.functions as f
df.filter(df.value >= 10
标签: Pyspark
palantir-foundryfoundry-code-workbooksfoundry-code-repositories
在代码回购中,使用pyspark,我试图使用今天的日期,基于此,我需要检索上一季度的最后一天。然后,该日期将用于过滤数据框中的数据。我试图在代码repo中创建一个数据帧,但这不起作用。我的代码在代码工作簿中工作。这是我的代码工作簿代码
将日期时间导入为dt
导入pyspark.sql.F函数
def unnamed():
date_df=spark.createDataFrame([(dt.date.today(),)],['date'])
日期=日期\
.带列('qtr\u开始日期',F.da
我有一个pyspark dataframe列,其中有一些值是字符串,一些值是数字,如下所示-
Source_ids
abc_123
1234.0
345
abc_cad
K-123
540.0
456.0
我想把小数部分去掉。所以结果应该是
Source_ids
abc_123
1234
345
abc_cad
K-123
540
456
我们不能将此列设为长类型,因为它也有文本。如何实现它?使用regexp\u replace。将\..*$替换为空字符串'
此表达式查找点,并替换其后的所有
标签: Pyspark
condapalantir-foundryfoundry-code-repositoriesfoundry-python-transform
为了泛化python函数,我想将函数添加到python库中,以便可以跨多个存储库使用这些函数。任何人请回答以下问题
1)如何创建我们自己的python库
2) 如何跨多个存储库导入这些库
如何在Palantir Foundry中创建python库
要创建新库,可以通过创建新存储库来实现。当提示您初始化存储库时,您应该有一个选项,内容如下:
Python Library
Template for publishing a Python library package. Consuming new
我有一个脚本,可以方便地在Jupyter笔记本中使用Spark。这很好,除非我在第二个笔记本中运行spark命令(例如测试一些临时工作)
我收到一条很长的错误消息,其关键部分似乎是:
Py4JJavaError:调用o31.json时出错。
:java.lang.RuntimeException:java.lang.RuntimeException:无法实例化org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient`
原因:错误
我在pyspark有一张登记表
+--------+-------+--------+------------+---------+-----------------+----------------------+
|order_id|user_id|eval_set|order_number|order_dow|order_hour_of_day|days_since_prior_order|
+--------+-------+--------+------------+---------+
我试图通过终端运行pyspark。从我的终端,我运行snotebook,它将自动加载jupiter。之后,当我选择python3时,终端会显示错误
[IPKernelApp]警告|处理PYTHONSTARTUP文件时出现未知错误
/Users/simon/spark-1.6.0-bin-hadoop2.6/python/pyspark/shell.py
下面是我的.bash_配置文件设置:
export PATH="/Users/simon/anaconda/bin:$PATH"
export
像这样使用时,我遇到以下错误:
columnList = [item[0] for item in df1.dtypes if item[1].startswith('string')]
df2 = df1.groupBy("TCID",columnList).agg(mean("Runtime").alias("Runtime"))
从pyspark.sql.DataFrame.groupBy获取“要分组的列列表”
代码失败,因为第二个参数(columnList)不是有效的列标识符。因此错
我知道这可能是个愚蠢的问题。我有以下代码:
from pyspark.sql import SparkSession
rows = [1,2,3]
df = SparkSession.createDataFrame(rows)
df.printSchema()
df.show()
但我有一个错误:
createDataFrame() missing 1 required positional argument: 'data'
我不明白为什么会发生这种情况,因为我已经提供了“数据”,即变量行
顾名思义,我希望在Power BI中看到实时数据。我已经建立了到spark streaming的管道,在那里我正在处理数据,现在我想进入Power BI。最好使用Python
现在根据我的理解,可能有以下提到的不同方式
将流数据存储到Azure Blob中,并在power BI中使其成为实时连接。我知道从纸面上看这听起来很完美,但有可能这样做吗
第二种方法是在PowerBI中创建一个推送数据集,获取RESTAPI URL并将Spark streaming的请求发布到该数据集。所以我的问题是,是否
标签: Pyspark
jupyteramazon-sagemaker
我按照说明设置了一个EMR集群和一个SageMaker笔记本。直到最后一步,我才发现任何错误
当我在Sagemaker中打开一个新笔记本时,我会收到以下信息:
The kernel appears to have died. It will restart automatically.
然后:
The kernel has died, and the automatic restart has failed.
It is possible the kernel
下面的代码抛出列not iterable错误
代码:
df = spark.createDataFrame([('abcd', '123')], ['s', 'd'])
df.select(concat_ws('', coalesce(df.s, "sometext"), coalesce(df.d, "sometext")).alias('sd')).show()
concat_ws要求将分隔符作为第一个参数,请参阅。因此,如果不想使用分隔符,可以执行以下操作:
df.select(conc
我将spark 2.3.2与pyspark一起使用,刚刚发现foreach和foreachBatch在此配置中的“DataStreamWriter”对象中不可用。问题是公司Hadoop是2.6,spark 2.4(提供了我所需要的)不起作用(SparkSession正在崩溃)。还有其他方法可以将数据发送到自定义处理程序并处理流数据吗
这是我到目前为止的代码:
def streamLoad(self,customHandler):
options = self.options
标签: Pyspark
apache-spark-sqlazure-databricks
我正在尝试使用DataRicks中的spark dataframe读取csv文件。csv文件包含双引号和逗号分隔的列。我尝试了以下代码,但无法读取csv文件。但是,如果我在datalake中检查该文件,我可以看到该文件
输入和输出如下所示
df=spark.read.format(“com.databricks.spark.csv”)\
.选项(“标题”、“正确”)\
.选项(“全部”、“真实”)\
.选项(“转义”、“转义”)\
.csv(“mnt/A/B/test1.csv”)
输入文件数
标签: Pyspark
apache-spark-sqlpyspark-dataframes
我有一个pyspark数据帧,它有两个id列id和id2。每个id都被精确地重复n次。所有id都具有相同的id2。我试图根据id2将每个唯一的id生成的矩阵“展平”为一行
下面是一个示例来解释我试图实现的目标,我的数据框架如下所示:
+----+-----+--------+--------+
| id | id2 | value1 | value2 |
+----+-----+--------+--------+
| 1 | 1 | 54 | 2 |
+----+---
您好,我想将字符串日期转换为日期格式:
例如从190424年到2019-01-24年
我尝试使用以下代码:
tx_wd_df = tx_wd_df.select(
'dateTransmission',
from_unixtime(unix_timestamp('dateTransmission', 'yymmdd')).alias('dateTransmissionDATE')
)
但我得到了这个格式:2019-01-24 00:04:00
我只想要2019-01-24
有
我正在pyspark上运行SQL查询,并得到以下错误
你能帮帮我吗
query = "select DENSE_RANK() OVER(ORDER BY PROD_NM, CNTRY) AS SYSTEM_ID, id AS SOURCE_ID,source_name,prod_nm,CNTRY,source_entity,entity_name from(SELECT distinct id, 'AMPIL' as SOURCE_NAME,prod_nm, 'PROD2' AS Source
我尝试连接到一个名为stv_sessions的红移系统表,我可以将数据读入数据帧
此stv_sessions表是一个红移系统表,其中包含当前运行的所有查询的进程id
要从运行中删除查询,我们可以这样做
select pg_terminate_backend(pid)
如果我直接连接到redshift(使用aginity),这对我来说是可行的,但当我试图从databricks运行时,它会给我带来不充分的预防问题
简单地说,我不知道如何从databricks笔记本运行查询
我已经试过了
kill_
当我尝试从HDFS读取拼花地板文件时,我得到了所有混合情况下的模式。我们能把它转换成小写吗
df=spark.read.parquet(hdfs_location)
df.printSchema();
root
|-- RecordType: string (nullable = true)
|-- InvestmtAccnt: string (nullable = true)
|-- InvestmentAccntId: string (nullable = true)
|-- Financ
我有一个数据帧:
+--------------+-----------------+-------------------+
| ecid| creation_user| creation_timestamp|
+--------------+-----------------+-------------------+
|ECID-195000300|USER_ID1 |2018-08-31 20:00:00|
|ECID-195000300|USER
标签: Pyspark
splitcountuser-defined-functionsassert
我有一个包含多列的数据框,包括video\u id和tags
我需要在我的df中创建一个名为occurrencias_music的新列,其中字符串“music”的出现次数作为任何标记的子字符串。标签不一定与“music”完全相同,但它包含它作为子字符串
稍后,我们的想法是实现一个UDFsubtag\u music\u UDF,它返回IntegerType(),并封装传统的python函数subcadena\u en\u vector(tags):
为此,我需要一个名为subcadena\u en
我正在尝试使用pySpark将camelCase字符串拆分为两个字符串,基本上与Python中的操作相同:
re.sub(r'([a-z](?=[A-Z])|[A-Z](?=[A-Z][a-z]))', r'\1 ', 'this is a teSt')
我得到的最接近的方法是使用regexp\u replace,使用类似以下的内容:
.withColumn('split_camelcase', regexp_replace('stringColumn', r'([a-z](?=[A-Z])|
我引用的数据帧名称基于我摄取的文件。但是,文件中可能包含数字。例如,文件名可以是DocumentList20200101
我正在尝试删除这些数字,以便数据帧名称为DocumentList
我非常感谢您在这方面的帮助。将变量作为数据帧的名称不是一个好做法。为此构建一个数据帧字典。Hi@mck。嗯,是的,这感觉不是一种稳定的工作方式。谢谢你的评论。
标签: Pyspark
pyspark-sqllookup-tablespyspark-dataframes
我正在研究spark群集,我有两个数据帧。一个包含文本。另一个是查找表。这两个表都很大(M和N都很容易超过100000个条目)。匹配它们的最佳方式是什么
做交叉连接然后根据匹配过滤结果似乎是一个疯狂的想法,因为我肯定会耗尽内存
我的数据帧如下所示:
df1:
text
0 i like apples
1 oranges are good
2 eating bananas is healthy
. ...
. ...
M
假设我有很多dataframe,结构相似,但列不同。我想把它们结合在一起,如何更容易地做到这一点
例如,df1、df2、df3如下所示:
df1
df2
df3
将是:
id base1 base2 col1 col2 col3 col4
1 1 100 30 1 2 3
2 2 200 40 2 3 4
3 3 300 20 4 4 5
5 4
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 64 页