Questions tagged «pyspark»

Spark Python API(PySpark)将apache-spark编程模型公开给Python。

9
在pyspark数据框中显示不同的列值:python
请为Pandas建议pyspark数据框替代方案df['col'].unique()。 我想在pyspark dataframe列中列出所有唯一值。 不是SQL类型的方式(先注册模板,然后通过SQL查询不同的值)。 另外,我不需要groupby->countDistinct,相反,我想检查该列中的不同值。

5
PySpark 2.0 DataFrame的大小或形状
我试图找出PySpark中DataFrame的大小/形状。我看不到可以执行此操作的单个功能。 在Python中我可以做 data.shape() PySpark是否有类似的功能。这是我目前的解决方案,但我正在寻找一个要素 row_number = data.count() column_number = len(data.dtypes) 列数的计算不是理想的...

10
Spark Dataframe区分名称重复的列
因此,正如我在Spark Dataframe中所知道的那样,多个列可以具有相同的名称,如下面的dataframe快照所示: [ Row(a=107831, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}), a=107831, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0})), Row(a=107831, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}), a=125231, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0047, 3: 0.0, 4: …


15
如何将PyCharm与PySpark链接?
我是apache spark的新手,显然我在macbook中安装了带自制程序的apache-spark: Last login: Fri Jan 8 12:52:04 on console user@MacBook-Pro-de-User-2:~$ pyspark Python 2.7.10 (default, Jul 13 2015, 12:05:58) [GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin Type "help", "copyright", "credits" or "license" for more information. Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties 16/01/08 14:46:44 INFO SparkContext: Running Spark version …

5
在Spark中更新数据框列
查看新的spark数据框api,尚不清楚是否可以修改数据框列。 我怎么会去改变行的值x列y一个数据帧的? 在pandas这将是df.ix[x,y] = new_value 编辑:合并以下内容,您将无法修改现有数据框,因为它是不可变的,但是您可以返回具有所需修改的新数据框。 如果您只想根据条件替换列中的值,例如np.where: from pyspark.sql import functions as F update_func = (F.when(F.col('update_col') == replace_val, new_value) .otherwise(F.col('update_col'))) df = df.withColumn('new_column_name', update_func) 如果要对列执行某些操作并创建一个添加到数据框的新列: import pyspark.sql.functions as F import pyspark.sql.types as T def my_func(col): do stuff to column here return transformed_value # if we assume that my_func returns a …

7
重命名pyspark数据框聚合的列
我正在使用pyspark数据帧分析一些数据,假设df我正在聚合一个数据帧: (df.groupBy("group") .agg({"money":"sum"}) .show(100)) 这会给我: group SUM(money#2L) A 137461285853 B 172185566943 C 271179590646 聚合工作正常,但我不喜欢新的列名“ SUM(money#2L)”。是否有一种巧妙的方法可以将该列重命名为该方法可以人工读取的内容.agg?也许更类似于以下内容dplyr: df %>% group_by(group) %>% summarise(sum_money = sum(money))


2
Spark:在我的用例中,为什么Python明显优于Scala?
为了比较使用Python和Scala时Spark的性能,我用两种语言创建了相同的作业,并比较了运行时。我希望两个作业都花费大致相同的时间,但是Python作业仅花费27min,而Scala作业却花费了37min(将近40%!)。我也用Java实现了同样的工作,而且也花了很多37minutes时间。Python怎么可能这么快? 最小的可验证示例: Python工作: # Configuration conf = pyspark.SparkConf() conf.set("spark.hadoop.fs.s3a.aws.credentials.provider", "org.apache.hadoop.fs.s3a.AnonymousAWSCredentialsProvider") conf.set("spark.executor.instances", "4") conf.set("spark.executor.cores", "8") sc = pyspark.SparkContext(conf=conf) # 960 Files from a public dataset in 2 batches input_files = "s3a://commoncrawl/crawl-data/CC-MAIN-2019-35/segments/1566027312025.20/warc/CC-MAIN-20190817203056-20190817225056-00[0-5]*" input_files2 = "s3a://commoncrawl/crawl-data/CC-MAIN-2019-35/segments/1566027312128.3/warc/CC-MAIN-20190817102624-20190817124624-00[0-3]*" # Count occurances of a certain string logData = sc.textFile(input_files) logData2 = sc.textFile(input_files2) a = logData.filter(lambda value: …

1
从Pyspark df到PostgresSQL写入超过5000万,这是最有效的方法
从Spark数据帧向Postgres Tables插入数百万条记录(例如5000万条)的最有效方法是。过去,我通过使用批量复制和批处理大小选项(从成功的火花到MSSQL)做到了这一点 。 Postgres是否有类似的东西? 添加我尝试过的代码以及运行该过程所花费的时间: def inserter(): start = timer() sql_res.write.format("jdbc").option("numPartitions","5").option("batchsize","200000")\ .option("url", "jdbc:postgresql://xyz.com:5435/abc_db") \ .option("dbtable", "public.full_load").option("user", "root").option("password", "password").save() end = timer() print(timedelta(seconds=end-start)) inserter() 因此,我对1000万条记录执行了上述方法,并按中指定的进行了5个并行连接,numPartitions并尝试了200k的批量大小。 该过程花费的总时间为0:14:05.760926(十四分五秒)。 还有其他有效的方法可以减少时间吗? 我可以使用的有效或最佳批次大小是多少?增加我的批量大小会更快地完成工作吗?还是打开多个连接,即> 5可以帮助我更快地完成此过程? 在一个平均14分钟10万条记录是不坏,但找的人在那里谁也以前做过这有助于回答这个问题。

3
在安装spark 2.4.4后尝试运行pyspark时如何解决'TypeError:整数是必需的(got类型字节)'错误
我已经安装了OpenJDK 13.0.1,python 3.8和spark 2.4.4。测试安装的说明是从spark安装的根目录运行。\ bin \ pyspark。我不确定是否错过了Spark安装步骤,例如设置一些环境变量,但是找不到任何进一步的详细说明。 我可以在我的机器上运行python解释器,因此我确信它已正确安装,并且运行“ java -version”可以给我预期的响应,因此我认为这两个问题都不是问题。 我从cloudpickly.py中获得了错误的堆栈跟踪: Traceback (most recent call last): File "C:\software\spark-2.4.4-bin-hadoop2.7\bin\..\python\pyspark\shell.py", line 31, in <module> from pyspark import SparkConf File "C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\__init__.py", line 51, in <module> from pyspark.context import SparkContext File "C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\context.py", line 31, in <module> from pyspark import accumulators File "C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\accumulators.py", line 97, …

1
熊猫UDF和pyarrow 0.15.0
最近,我开始pyspark在EMR群集上运行的许多作业中遇到一堆错误。错误是 java.lang.IllegalArgumentException at java.nio.ByteBuffer.allocate(ByteBuffer.java:334) at org.apache.arrow.vector.ipc.message.MessageSerializer.readMessage(MessageSerializer.java:543) at org.apache.arrow.vector.ipc.message.MessageChannelReader.readNext(MessageChannelReader.java:58) at org.apache.arrow.vector.ipc.ArrowStreamReader.readSchema(ArrowStreamReader.java:132) at org.apache.arrow.vector.ipc.ArrowReader.initialize(ArrowReader.java:181) at org.apache.arrow.vector.ipc.ArrowReader.ensureInitialized(ArrowReader.java:172) at org.apache.arrow.vector.ipc.ArrowReader.getVectorSchemaRoot(ArrowReader.java:65) at org.apache.spark.sql.execution.python.ArrowPythonRunner$$anon$1.read(ArrowPythonRunner.scala:162) at org.apache.spark.sql.execution.python.ArrowPythonRunner$$anon$1.read(ArrowPythonRunner.scala:122) at org.apache.spark.api.python.BasePythonRunner$ReaderIterator.hasNext(PythonRunner.scala:406) at org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:37) at org.apache.spark.sql.execution.python.ArrowEvalPythonExec$$anon$2.<init>(ArrowEvalPythonExec.scala:98) at org.apache.spark.sql.execution.python.ArrowEvalPythonExec.evaluate(ArrowEvalPythonExec.scala:96) at org.apache.spark.sql.execution.python.EvalPythonExec$$anonfun$doExecute$1.apply(EvalPythonExec.scala:127)... 它们似乎都发生在apply熊猫系列的功能中。我发现的唯一更改是pyarrow在星期六(05/10/2019)更新的。测试似乎适用于0.14.1 因此,我的问题是,是否有人知道这是新更新的pyarrow中的错误,还是有一些重大更改会导致pandasUDF将来难以使用?

1
Apache Spark:重新分区,排序和缓存对联接的影响
我正在探索将表联接到自身时Spark的行为。我正在使用Databricks。 我的虚拟场景是: 读取外部表作为数据框A(底层文件为增量格式) 将数据框B定义为仅选择某些列的数据框A 在column1和column2上连接数据框A和B (是的,这没有多大意义,我只是在尝试了解Spark的基本机制) a = spark.read.table("table") \ .select("column1", "column2", "column3", "column4") \ .withColumn("columnA", lower((concat(col("column4"), lit("_"), col("column5"))))) b = a.select("column1", "column2", "columnA") c= a.join(b, how="left", on = ["column1", "column2"]) 我的第一次尝试是按原样运行代码(尝试1)。然后,我尝试重新分区和缓存(尝试2) a = spark.read.table("table") \ .select("column1", "column2", "column3", "column4") \ .withColumn("columnA", lower((concat(col("column4"), lit("_"), col("column5"))))) .repartition(col("column1"), col("column2")).cache() 最后,我重新分区,排序和缓存 a = …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.