не уверен, что вы подразумеваете под строкой URL, но строки имеют больше байтов и занимают больше всего памяти при сериализации ... я бы запустил
df_join.explain()
и проверьте, сколько тасовок запускается в преобразованиях ... поскольку это небольшой набор данных, уменьшите его до значения, подобного
spark.conf.set("spark.sql.shuffle.partitions, 8)
также хотите убедиться, что у вас достаточно ядер для каждого исполнителя, которые вы можете установить через запуск оболочки во время выполнения, например
pyspark --master yarn executor-cores 5
в целом медлительность может быть вызвана многими причинами, такими как объем данных, с каким параметром конфигурации развертывания (локальный, автономный, пряжа [клиент / кластер]) ... обычно для того, что я видел виновника для более длительного задания сводятся ко многим # выходным разделам, вызванным широкими преобразованиями (соединениями / объединениями), нехваткой ядер исполнителя (по умолчанию при запуске 1, я считаю) и тем, что pyspark / sparkR просто не так быстры из-за отдельные процессы вне JVM, требующие передачи сериализованного объекта в
и из него
также проверьте Spark UI в STORAGE TAB и убедитесь, что все разделы кэшированы на 100% ... если в память помещается только часть, то вам, возможно, придется увеличить память исполнителя, потому что частично кэшированные DF вызывают массу проблем с получением некэшированные разделы
pyspark --master yarn --executor-memory "gb"
извините за множество предложений ... Spark - иногда неприятный маленький пагубник, и основной причиной может быть длинный список проблем
from pyspark.sql.functions import col, array
df = spark.createDataFrame([
(["1, 2, 3"]),
(["4, 5, 6"]),
(["7, 8, 9"])
], ["string_array"])
df.select(array("string_array").alias("array_data")).printSchema()
df.select(array("string_array").alias("array_data")).show()
root
|-- array_data: array (nullable = false)
| |-- element: string (containsNull = true)
+----------+
|array_data|
+----------+
| [1, 2, 3]|
| [4, 5, 6]|
| [7, 8, 9]|
+----------+
jsonDF = spark.range(1).selectExpr("""
'{"myJSONValue" : [1, 2, 3]}' as jsonString""")
jsonDF.show(truncate=False)
jsonDF.printSchema()
jsonDF.select(array("jsonString").alias("json_array")).show(truncate=False)
jsonDF.select(array("jsonString").alias("json_array")).printSchema()
+---------------------------+
|jsonString |
+---------------------------+
|{"myJSONValue" : [1, 2, 3]}|
+---------------------------+
root
|-- jsonString: string (nullable = false)
+-----------------------------+
|json_array |
+-----------------------------+
|[{"myJSONValue" : [1, 2, 3]}]|
+-----------------------------+
root
|-- json_array: array (nullable = false)
| |-- element: string (containsNull = false)